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