邏輯運算符
&(與):只有兩邊的boolean表達式結果都為true,結果為true糜俗。
|(或):兩邊只要有一個為true桩盲,結果就為true眯勾。
^(異或):當兩邊結果不一樣時,結果就為true褪猛。
!(非):對表達式結果取反网杆。
-
&&(短路):當?shù)谝粋€表達式結果為false時,直接返回false伊滋,不判斷第二個表達式結果碳却。
&:無論左邊是真是假,右邊都運算
&&:當左邊為false時笑旺,右邊不運算昼浦。& 無論左邊是真是假,右邊都運算 && 當左邊為false時筒主,右邊不運算关噪。 |:兩邊都參與運算。
||:當左邊為true乌妙,右邊不運算使兔。| 無論左邊是真是假,右邊都運算 "||" 當左邊為false時藤韵,右邊不運算虐沥。
位運算符
二進制運算
- << :左移
如
3<<2
3左移兩位,將3轉化為二進制荠察,向左移動兩位置蜀,右邊空位用0補齊。3<<2 結果為12.
00001010 << 2 = 00101000
10001010 << 3 = 01010000
實際上就是3*2的2次方悉盆,即為3*4
- >> :右移 帶符號右移盯荤,如果是負數(shù),高位補1焕盟,正數(shù)則補0.
如
6>>2
6右移兩位秋秤,將6轉化為二進制宏粤,向右移動兩位,左邊空位用0補齊,右邊兩位數(shù)據(jù)被舍棄灼卢。6>>2 結果為1.實際上就是6除以2的2次方绍哎,即為6/4 = 1
>>(帶符號右移) | >>>(無符號右移) |
---|---|
最高位補什么由原數(shù)據(jù)的最高位值決定 | 無論最高位是什么,右移后都用0補 |
- & :位與運算
如 6 & 3 鞋真,先將6和3都轉化為二進制崇堰,將對應位上的0視為true,1視為false涩咖,再做與的邏輯運算海诲。 6 & 3 結果為 2
應用:把一個整數(shù)減去1之后再和原來的整數(shù)做位與運算,得到的結果相當于是把整數(shù)的二進制表示中的最右邊一個1變成0
- | :位或運算
如 6 | 5 結果為 7
- ^ : 位異或運算
如 6 ^ 5 結果為 3
- 按位異或的4個特點:
- 0 ^ 0=0,0 ^ 1=1 0異或任何數(shù)=任何數(shù)
- 1 ^ 0=1,1 ^ 1=0 1異或任何數(shù)=任何數(shù)取反
- 任何數(shù)異或自己=把自己置0
- 任意一個數(shù)與任意一個給定的值連續(xù)異或兩次檩互,值不變特幔。
即:a ^ b ^ b=a。將a=a ^ b代入b=a ^ b則得b=a ^ b ^ b=a;同理可以得到a = b ^ a ^ a = b;輕松完成交換闸昨。
- 按位異或的幾個常見用途:
使某些特定的位翻轉
例如對數(shù)10100001的第2位和第3位翻轉蚯斯,則可以將該數(shù)與00000110進行按位異或運算。
10100001^00000110 = 10100111實現(xiàn)兩個值的交換饵较,而不必使用臨時變量拍嵌。
例如交換兩個整數(shù)a=10100001,b=00000110的值告抄,可通過下列語句實現(xiàn):
a = a^b撰茎; //a=10100111
b = a^b; //b=10100001
a = a^b打洼; //a=00000110
- ~(反碼)
~6 = -7