位運算 異或 與 的妙用

2021-10-18 07:37:13 字數 1716 閱讀 7908

2. 與 ^

3. 異或&與^結合的奇妙例子

真正在公司中的實踐:nosql + rdbms 一起使用才是最強的,阿里巴巴的架構演進! 技術沒有高低之分,就看你如何去使用!(提公升內功,思維的提高!) 雲計算的長征之路:阿里雲的這群瘋子

無進製相加,滿**換律 結合律

0^n == n        n^n == 0

int a =16;

int b =61;

system.out.

println

("a交換前的值為:"

+a);

system.out.

println

("b交換前的值為:"

+b);

a = a ^ b;

b = a ^ b;

a = a ^ b;

system.out.

println

("a交換後的值為:"

+a);

system.out.

println

("b交換後的值為:"

+b);

public

static

void

printoddtimesnum1

(int

arr)

system.out.

println

(eor)

;}

兩個位都為1時,結果才為1

int eor =10;

// ~eor 取反

int rightone = eor &

(~eor+1)

;//rightone = 2

// 10 -> 1010

//~10 -> 0101

//~10+1-> 0110

//10 & (~10+1) = 0010=2

public

static

intbit1counts

(int n)

return count;

}

// arr中,有兩種數,出現奇數次。假設兩數為a與b

public

static

void

printoddtimesnum2

(int

arr)

// a 和 b是兩種數

// eor != 0 因為a^b!=0

// eor最右側的1,提取出來

// eor : 00110010110111000

// rightone :00000000000001000

int rightone = eor &

(-eor+1)

;// 提取出最右的1

//此時,兩奇數a,b與其對應的偶數,已根據rightone分離開來

int onlyone =0;

for(

int i =

0; i < arr.length;i++)}

system.out.

println

("兩種出現奇數次的數分別為:"

+onlyone +

" "+

(eor ^ onlyone));

}

按位 與 或 與 異或 運算

規則 有0出0,全1為1 特殊用處 1 清零 如果想將乙個單元清零,即使其全部二進位制位為0,只要與乙個各位都為零的數值相與,結果為零。2 取乙個數中指定位 找乙個數,對應x要取的位,該數的對應位為1,其餘位為零,此數與x相與可以得到x中的指定位。3 x x 得到x的二進位制最右邊的1的位置i 從右...

異或,與,或運算

參加運算的兩個資料,按二進位制位進行 與 運算。運算規則 0 0 0 0 1 0 1 0 0 1 1 1 即 兩位同時為 1 結果才為 1 否則為0 例如 3 5 即 0000 0011 0000 0101 0000 0001 因此,3 5的值得1。例如 9 5 即 0000 1001 9的二進位制...

異或 運算的妙用

現有1,1,2,2,3,3,n,n共2n個數,其中各個數字排列的順序是任意的,是雜亂放的,即沒有排序。現在刪除了其中的乙個數剩下了2n 1個數,求刪除的那個數?可能大多數人的第一想法是 用2n個數的總和 n n 1 減去2n 1個數的總和,不錯,想法是正確的。但是,放在計算機中考慮的話,此方法就不太...