Java 位運算

首先,在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。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容