java運算符

按位與運算符(&)

參加運算的兩個數據,按二進位進行“與”運算。如果兩個相應的二進位都爲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。因爲“~”運算符的優先級比算術運算符、關係運算符、邏輯運算符和其他運算符都高。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章