1.>>,>>>和<<<
<< : 左移運算符,num << 1,相當於num乘以2
>> : 右移運算符,num >> 1,相當於num除以2
>>> : 無符號右移,忽略符號位,空位都以0補齊
對於正數而言,>>和>>>沒區別。
對於負數而言,-2 >>> 1,結果是2147483647(Integer.MAX_VALUE),-1 >>> 1,結果是2147483647(Integer.MAX_VALUE)。
所以,要判斷兩個數符號是否相同時,可以這麼幹:
return ((a >> 31) ^ (b >> 31)) == 0;
2.&,&和|,||
- &和&&的區別:
- 單&時,左邊無論真假,右邊都進行運算;
- 雙&時,如果左邊爲真,右邊參與運算,如果左邊爲假,那麼右邊不參與運算。
-
“|”和“||”的區別:
- 單或時,左邊無論真假,右邊都進行運算;
- 雙或時,左邊爲真,右邊不參與運算。
注:這裏的左邊右邊值邏輯運算符的左邊右邊
異或( ^ )與或( | )的唯一不同之處是:當左右都爲true時,結果爲false。(不同才爲真)
當是操作符的時候:&表示只有對應的兩個二進位均爲1時,結果位才爲1,否則爲0。