首先,在Java中,運算符有以下這些:
- 按位與 &
- 按位或 |
- 按位異或 ^
- 按位非 ~
- 左移 <<
- 右移 >>
- 無符號右移 >>>
好了,我們一個個來,先說簡單的
1. 按位與 &
如果相對應位都是1,則結果為1,否則為0 。
說完了概念,我們得舉個例子
比如:6 & 3
int 類型的 6 二進制為 0000 0000 0000 0000 0000 0000 0000 0110
int 類型的 3 二進制為 0000 0000 0000 0000 0000 0000 0000 0011
所以運算的結果等于:0000 0000 0000 0000 0000 0000 0000 0010 十進制就是2
2. 按位或 |
如果相對應位都是0,則結果為0,否則為1。
比如:8 | 5
int 類型的 8 二進制為 0000 0000 0000 0000 0000 0000 0000 1000
int 類型的 5 二進制為 0000 0000 0000 0000 0000 0000 0000 0101
所以運算的結果等于:0000 0000 0000 0000 0000 0000 0000 1101 十進制就是13
3. 按位異或 ^
如果相對應位值相同,則結果為0,否則為1 。
比如:9 ^ 3
int 類型的 9 二進制為 0000 0000 0000 0000 0000 0000 0000 1001
int 類型的 3 二進制為 0000 0000 0000 0000 0000 0000 0000 0011
所以運算的結果等于:0000 0000 0000 0000 0000 0000 0000 1010 十進制就是10
4. 按位非 ~
翻轉操作數的每一位,即0變成1,1變成0
比如:~9
int 類型的 9 二進制為 0000 0000 0000 0000 0000 0000 0000 1001
~9運算結果為 1111 1111 1111 1111 1111 1111 1111 0110
5. 左移 <<
左操作數按位左移右操作數指定的位數,低位補0。
比如:5 << 3,其中5就是左操作數,3是向左移動的位數
int 類型的 5 二進制為 0000 0000 0000 0000 0000 0000 0000 0101,左移三位的結果是:0000 0000 0000 0000 0000 0000 0010 1000,轉換成十進制為:40。所以 5 << 3 的結果是 40.
6. 右移 >>
左操作數按位右移右操作數指定的位數,高位補符號,也就是如果是正數,高位補0,負數,高位補1。
比如:8 >> 2
int 類型的 8 二進制為 0000 0000 0000 0000 0000 0000 1000,右移兩位的結果是:0000 0000 0000 0000 0000 0000 0000 0010,十進制為:2。所以 8 >> 2,結果是2。
再舉一個負數的例子:-8 >> 2
int 類型的 -8 二進制為 1000 0000 0000 0000 0000 0000 0000 1000,這是原碼,負數在計算機中的表現形式是補碼的形式,所以還得轉成補碼(關于原碼、反碼、補碼的知識,參考我另一篇文章)。-8 的補碼是:1111 1111 1111 1111 1111 1111 1111 1000,右移兩位,高位補1的結果是:1111 1111 1111 1111 1111 1111 1111 1110。再把補碼轉回原碼:1000 0000 0000 0000 0000 0000 0000 0010。十進制為 -2。所以 -8 >> 2,結果是-2。
7. 無符號右移 >>>
跟右移一樣,區別在于,無論正數還是負數,高位都補0。