按位 與 或 與 異或 運算

2021-08-21 14:37:10 字數 1176 閱讀 8797

規則:有0出0,全1為1

特殊用處:

(1)清零

如果想將乙個單元清零,即使其全部二進位制位為0,只要與乙個各位都為零的數值相與,結果為零。

(2)取乙個數中指定位

找乙個數,對應x要取的位,該數的對應位為1,其餘位為零,此數與x相與可以得到x中的指定位。

(3)  x&(-x)

得到x的二進位制最右邊的1的位置i(從右邊數),即x&(-x)=2^i 。例如當x=1100時,x&(-x)=100.

拓展:y=x+1,y&(-y) 得到x的二進位制最右邊的0的位置i(從右邊數)。例如當x=1101時,y=1110,y&(-y)=10.

(4)x&(x-1)

將x的二進位制的最右邊的1->0。例如當x=1100時,x&(x-1)=1000.

可以用來求二進位制1的個數:

int cnt=0;

while(x)

規則:有1出1,全0為0

特殊用處:

(1)對乙個資料的某些位置1找到乙個數,對應x要置1的位,該數的對應位為1,其餘位為零,此數與x相或可使x中的某些位置1。

規則:0^0=0;  0^1=1;  1^0=1;   1^1=0;

特殊用處:

(1)使特定位翻轉找乙個數,對應x要翻轉的各位,該數的對應位為1,其餘位為零,此數與x對應位異或即可。

例:x=10101110,使x低4位翻轉,用x ^0000 1111 = 1010 0001即可得到。

(2)與0相異或,保留原值,x ^ 00000000 = 1010 1110。

異或的幾條性質:

1.交換律

2.結合律

3.x^x=0,x^0=x

4.自反性:a^b^b=a^0=a;

異或運算最常見於多項式除法,不過它最重要的性質還是自反性:a^b^b=a,即對給定的數a,用同樣的運算因子(b)作兩次異或運算後仍得到a本身。這是乙個神奇的性質,利用這個性質,可以獲得許多有趣的應用。 例如,交換a b的值:a^=b^=a^=b;

應用舉例:

1-1000放在含有1001個元素的陣列中,只有唯一的乙個元素值重複,其它均只出現一次。每個陣列元素只能訪問一次,設計乙個演算法,將它找出來;不用輔助儲存空間,能否設計乙個演算法實現?

將所有的數全部異或,得到的結果與1^2^3^...^1000的結果進行異或,得到的結果就是重複數。

位與 按位或 按位異或 運算

1.按位與運算 按位與運算子 是雙目運算子。其功能是參與運算的兩數各對應的二進位相與。只有對應的兩個二進位均為1時,結果位才為1 否則為0。參與運算的數以補碼方式出現。例如 9 5可寫算式如下 00001001 9的二進位制補碼 00000101 5的二進位制補碼 00000001 1的二進位制補碼...

位運算( 按位與 按位或 異或)

參加運算的兩個數,按二進位制位進行 運算。運算規則 只有兩個數的二進位制同時為1,結果才為1,否則為0。負數按補碼形式參加按位與運算 即 0 0 0 0 1 0,1 0 0,1 1 1。比如10 11 即 0000 1010 0000 1011 0000 1010 所以 10 11 等於10 參加運...

位運算(按位與 按位或 異或)

按位與運算子 參加運算的兩個數,按二進位制位進行 與 運算。運算規則 只有兩個數的二進位制同時為1,結果才為1,否則為0。負數按補碼形式參加按位與運算 即 0 0 0 0 1 0,1 0 0,1 1 1。例 3 5 即 00000011 00000101 00000001 所以 3 5的值為1。按位...