位運算符
前面我們提過,所有的整數類型,除了char外,都是有符號的。JAVA使用補碼錶示二進制數,在補碼錶示中,最高位爲符號位,正數的符號位爲0,負數的符號位爲1。
序號 |
運算符 |
含義 |
1 |
<< |
左移(移位運算符) |
2 |
>> |
右移(移位運算符) |
3 |
>>> |
無符號右移(移位運算符) |
4 |
~ |
非(取反)(位邏輯運算符) |
5 |
^ |
異或(位邏輯運算符) |
6 |
& |
與(位邏輯運算符) |
7 |
| |
或(位邏輯運算符) |
注:位運算符只存在於整數之間,前面說過byte、short、char 在運算時都會轉爲int類型,所以這3種類型也可以參與位運算。浮點數不能進行位運算。 |
上表中7種位運算符中,前3種是移位運算符,後4種是位邏輯運算符。
3個移位運算符
移位運算符有3個:<<、>>、>>>
<<左移運算符
例:-2 << 2
解:-2以二進制數表示爲:11111111 11111111 11111111 11111110 整形爲32位。
左移運算符表示,將這個二進制數往左邊移2位,即在末尾補2個0。
結果得到二進制數:11111111 11111111 11111111 11111000
除去符號位轉成10進制數,得8,其符號位爲1,即爲負數,結果爲-8
>>右移運算符
例:5 >> 2
解:5以二進制表示爲:00000000 00000000 00000000 00000101
右移運算符表示,講這個二進制數往右移動2位,即在前面補2個0,後面多餘的部分移除。
結果得到二進制數:00000000 00000000 00000000 00000001
出去符號位轉成10進制數,得1,其符號位爲0,即爲正數,結果爲1
>>>無符號右移
無符號右移動,即忽略符號位,將二進制數轉成十進制數時也將符號位的1或0計算在內
例1:-2 >>> 5
解: -2以二進制數表示爲:11111111 11111111 11111111 11111110
將這個二進制數往右移5位,即得:00000111 11111111 11111111 11111111
忽略符號位,再轉爲十進制數得到結果:134217727。
例2:5 >>> 2
解: 5以二進制數表示爲:00000000 00000000 00000000 00000101
將這個二進制數往右移3位,即得:00000000 00000000 00000000 00000001
忽略符號位,再轉爲十進制得到結果:1
4個位邏輯運算符號
位邏輯運算符有4個:^ 、 ~ 、 & 、 |
^異或運算符
異或運算先查看兩個數的二進制表示值,並執行按位異或。按位異或的計算方法爲,當且僅當只有一個數的二進制數的某位爲1時,結果的該位才爲1,否則結果的該位爲0。
例1: 5 ^ 3
解:5的二進制表示: 00000000 00000000 00000000 00000 101 (前面爲符號位)
3的二進制表示: 00000000 00000000 00000000 000000 11
結果爲 : 00000000 00000000 00000000 00000 110
結果轉成10進制數爲:6
例2: -5 ^ 2
解:-5的二進制表示:11111111 11111111 11111111 11111 101
2的二進制表示:00000000 00000000 00000000 00000 010
結果爲: 11111111 11111111 11111111 11111 111
結果轉成十進制數爲:-7
~取反運算符
取反運算符,顧名思義,取反運算符就是把某個二進制表示數中的1變成0,0變成1。
例: ~4
解: 4的二進制數表示爲: 00000000 00000000 00000000 00000 100 (前面爲符號位)
取反爲: 11111111 11111111 11111111 11111 011
轉成十進制數爲:-5
&邏輯與運算符
邏輯與運算最直觀的運算規律爲:遇 0 得 0。
即兩個二進制數進行邏輯與運算時,在相同位數上只要有0,則結果的相同位上得0。
例1:3 & 5
解:3 的二進制表示爲:00000000 00000000 00000000 00000011
5 的二進制表示爲:00000000 00000000 00000000 00000101
邏輯與運算結果爲:00000000 00000000 00000000 00000001
轉成十進制數結果爲: 1
例2: -3 & 5
解:-3的二進制表示爲:11111111 11111111 11111111 111111 11
5的二進制表示爲:00000000 00000000 00000000 00000 101
邏輯與運算結果爲:00000000 00000000 00000000 00000 101
轉成十進制數結果爲: 5
| 邏輯或運算符
邏輯或運算最直觀的運算規律爲:遇1得1
即兩個二進制數進行邏輯或運算時,在相同位數上只要有1,則結果的相同位上得1
例1: 4 | 3
解: 4的二進制表示爲: 00000000 00000000 00000000 00000100
3的二進制表示爲: 00000000 00000000 00000000 00000011
邏輯或運算結果爲: 00000000 00000000 00000000 00000111
轉成十進制數結果爲: 7
例2: -2 | 4
解: -5 的二進制表示爲: 11111111 11111111 11111111 11111110
4的二進制表示爲: 00000000 00000000 00000000 00000100
邏輯或運算結果爲: 11111111 11111111 11111111 11111110
轉成十進制數結果爲: -2