首先掂骏,在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. 按位非 ~
翻轉操作數(shù)的每一位谎脯,即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. 左移 <<
左操作數(shù)按位左移右操作數(shù)指定的位數(shù)持寄,低位補0源梭。
比如:5 << 3,其中5就是左操作數(shù)稍味,3是向左移動的位數(shù)
int 類型的 5 二進制為 0000 0000 0000 0000 0000 0000 0000 0101废麻,左移三位的結果是:0000 0000 0000 0000 0000 0000 0010 1000,轉換成十進制為:40模庐。所以 5 << 3 的結果是 40.
6. 右移 >>
左操作數(shù)按位右移右操作數(shù)指定的位數(shù)烛愧,高位補符號,也就是如果是正數(shù),高位補0怜姿,負數(shù)慎冤,高位補1。
比如:8 >> 2
int 類型的 8 二進制為 0000 0000 0000 0000 0000 0000 1000沧卢,右移兩位的結果是:0000 0000 0000 0000 0000 0000 0000 0010蚁堤,十進制為:2。所以 8 >> 2搏恤,結果是2违寿。
再舉一個負數(shù)的例子:-8 >> 2
int 類型的 -8 二進制為 1000 0000 0000 0000 0000 0000 0000 1000,這是原碼熟空,負數(shù)在計算機中的表現(xiàn)形式是補碼的形式藤巢,所以還得轉成補碼(關于原碼、反碼息罗、補碼的知識掂咒,參考我另一篇文章)。-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. 無符號右移 >>>
跟右移一樣膝蜈,區(qū)別在于,無論正數(shù)還是負數(shù)熔掺,高位都補0饱搏。