按位與運算符(&)
參加運算的兩個數據,按二進位進行“與”運算。如果兩個相應的二進位都爲1,則該位的結果值爲1,否則爲0。即 0&0=0;0&1=0;1&0=0;1&1=1;
例如: 3&5 並不等於8,應該是按位與。
3 = 00000011
(&) 5 = 00000101
00000001
因此,3&5的值得1。如果參加&是負數運算的是負數(如-3 & -5),則以補碼形式表示爲二進制數,然後按位進行“與”運算。
按位與有一些特殊的用途:
(1)清零:如果想將一個單元清零,即使其全部二進位爲0,只要找一個二進制數,其中各個位符合以下條件:原來的數中爲1的位,新數中相應位爲0。然後使二者進行&運算,即可達到清零目的。
如:原有數爲00101011,另找一個數,設它爲10010100,它符合以上條件,即在原數爲1的位置上,它的位值均爲0。將兩個數進行&運算:
00101011
(&)10010100
00000000
其道理是顯然的。當然也可以不用10010100這個數而用其他數(如01000100)也可以,只要符合上述條件即可。
(2)取一個數中某些指定位。如有一個整數a(2個字節),想要其中的低字節。只需將a與(737)8按位與即可。
按位異或運算符(^)
參與運算的兩個值,如果兩個相應位相同,則結果爲0,否則爲1。即:0^0=0, 1^0=1, 0^1=1, 1^1=0
例如:10100001^00010001=10110000
0^0=0,0^1=1 0異或任何數=任何數
1^0=1,1^1=0 1異或任何數-任何數取反
任何數異或自己=把自己置0
(1)按位異或可以用來使某些特定的位翻轉,如對數10100001的第2位和第3位翻轉,可以將數與00000110進行按位異或運算。
10100001^00000110=10100111 //1010 0001 ^ 0x06 = 1010 0001 ^ 6
(2)通過按位異或運算,可以實現兩個值的交換,而不必使用臨時變量。例如交換兩個整數a,b的值,可通過下列語句實現:
a=10100001,b=00000110
a=a^b; //a=10100111
b=b^a; //b=10100001
a=a^b; //a=00000110
(3)異或運算符的特點是:數a兩次異或同一個數b(a=a^b^b)仍然爲原值a.
按位或運算符(|)
參加運算的兩個對象,按二進制位進行“或”運算。
運算規則:0|0=0; 0|1=1; 1|0=1; 1|1=1;
即 :參加運算的兩個對象只要有一個爲1,其值爲1。
例如:3|5 即 0000 0011 | 0000 0101 = 0000 0111 因此,3|5的值得7。
另,負數按補碼形式參加按位或運算。
“或運算”特殊作用:
(1)常用來對一個數據的某些位置1。
方法:找到一個數,對應X要置1的位,該數的對應位爲1,其餘位爲零。此數與X相或可使X中的某些位置1。
例:將X=10100000的低4位置1 ,用 X | 0000 1111 = 1010 1111即可得到。
取反運算符(~)
參加運算的一個數據,按二進制位進行“取反”運算。
運算規則:~1=0;~0=1; 即:對一個二進制數按位取反,即將0變1,1變0。
使一個數的最低位爲零,可以表示爲:a&~1。
~1的值爲1111111111111110,再按“與”運算,最低位一定爲0。因爲“~”運算符的優先級比算術運算符、關係運算符、邏輯運算符和其他運算符都高。