1. 位運算&

我們之前說過,所有數據都以二進製表示形式存儲在內存中。所以很久以前,程序員想出了很多有趣的方法來處理二進制數。例如,Java 具有對數字二進製表示的位進行運算的邏輯運算符:&(AND)、, | (OR)( ~NOT 或補碼) 和^(XOR - 異或)。

a & b
按位&(AND) 運算符

此運算符與邏輯 (AND) 運算符非常相似&,只是它由一個符號表示,而不是兩個:

並將其應用於各個位。每個操作數都被視為一個位數組,i結果的第 th 位是使用i兩個操作數中每一個的第 th 位計算的。

結果的第一位將根據數字的第一位a 和數字的第一位計算b,第二位——根據數字的第二位a 和數字的第二位b,等等。

( &AND) 運算符的意思是“只有當數字的相應位等於一時,結果位才a等於一AND數字的相應位b等於一”:

1 & 1 = 1
1 & 0 = 0
0 & 1 = 0
0 & 0 = 0

例子:

例子 結果
0b0011 & 0b1010
0b0010
0b1111 & 0b0000
0b0000
0b1010 & 0b0101
0b0000
0b1111 & 0b1010
0b1010

2. 位運算|

此運算符與邏輯 (OR) 運算符非常相似|,只是它由一條垂直線表示,而不是兩條:

a | b

並將其應用於各個位。每個操作數都被視為一個位數組,結果的第 i 位是使用兩個操作數中每一個的第 i 位計算的。

按位|(OR) 運算符表示“如果數字的相應位等於 1,則結果位a等於 1,OR則數字的相應位b等於 1”:

1 | 1 = 1
1 | 0 = 1
0 | 1 = 1
0 | 0 = 0

例子:

例子 結果
0b0011 | 0b1010
0b1011
0b1110 | 0b0000
0b1110
0b1010 | 0b0101
0b1111
0b1111 | 0b1010
0b1111

只有當兩個數的對應位(相同位置的位)都為零時,結果對應的位才為零。



3. 按位^(異或或“異或”)運算符

運算XOR符,也發音為exclusive or,由符號表示^。要在鍵盤上輸入它,請按shift + 6(在英文鍵盤佈局上)。

a ^ b

該運算符與 運算符有些相似OR,包括名稱相似:XOR

按位^(XOR) 運算符表示“如果數字的相應位等於 1,則結果位a等於 1OR數字的相應位b等於 1,但不能同時等於 1”:

1 ^ 1 = 0
1 ^ 0 = 1
0 ^ 1 = 1
0 ^ 0 = 0

例子:

例子 結果
0b0011 ^ 0b1010
0b1001
0b1110 ^ 0b0000
0b1110
0b1010 ^ 0b0101
0b1111
0b1111 ^ 0b1010
0b0101

只有當兩個數對應的位(相同位置的位)不同時,結果對應的位才等於1。如果位相同則結果位等於零



4.按位~(非,補)運算符

我想你已經猜到它的作用了。此運算符與邏輯 (NOT) 運算符非常相似!,但它由波浪號而不是感嘆號表示:

~a

這是一個一元運算符,這意味著它適用於單個數字,而不是兩個。它出現在這個單一操作數之前。

按位運算符表示“如果數字的相應位為零,~則結果位為一,如果數字的相應位為一,則結果位為零”:aa

~1 = 0
~0 = 1

例子:

例子 結果
~0b0011
0b1100
~0b0000
0b1111
~0b0101
0b1010
~0b1111
0b0000

這個運算符只是簡單地改變了1到的位0和到的01