位運算符(與,或,異或,取反,左移,右移)

前言:
符號 描述 運算規則
& 同爲1時,結果爲1
| 同爲0時,結果爲0
^ 異或 相同爲0,不同爲1
<< 左移 各二進位全部左移若干位,高位丟棄,低位補0
>> 右移 各二進位全部右移若干位,低位丟失,高位補0
~ 取反 0變1,1變0

一、與運算符(&)

運算規則:
同爲1的時候結果爲1,不同的時候結果爲0,同爲0的時候也爲0

0 + 0 = 0
0 + 1 = 0
1 + 0 = 0
1 + 1 = 1

例如:3 & 4

3(0000 0011)
4(0000 0100)
-------------
0(0000 0000)

二、或運算符(|)

運算規則:
同爲0的時候結果爲0,同爲1的時候結果爲1,不相同的時候結果爲1(只有同爲0的時候結果才爲0,其他情況都爲1,只要出現1結果就爲1)

0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 1

例如: 3 | 4

3(0000 0011)
4(0000 0100)
-------------
7(0000 0111)

三、異或運算符(^)

運算規則:
同爲0,不同爲1

0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 0

注意:
異或運算不管0還是1,只要遇到相同的就爲0,只要遇到不相同就爲1

例如:3 ^ 4

3(0000 0011)
4(0000 0100)
-------------
7(0000 0111)

特例:
異或運算還可以做用於兩個數的交換

公式:

a = a ^ b
b = a ^ b
a = a ^ b

舉例:

1、定義兩個數值性常量a,b
2、a = 3
3、b = 5
4、交換a,b的值
5、輸出a,b交換後的結果

步驟一:a = a ^ b

a = a ^ b
a = 3 ^ 5
a = 6

a(0000 0011) = 3
b(0000 0101) = 5
-------------
a(0000 0110) = 6

步驟二:b = a ^ b

b = a ^ b
b = 6 ^ 5
b = 3

a(0000 0110) = 6
b(0000 0101) = 5
------------------
b(0000 0011) = 3

步驟三:a = a ^ b

a = a ^ b
a = 6 ^ 3
a = 5

a(0000 0110) = 6
b(0000 0011) = 3
------------------
a(0000 0101) = 5

步驟四: 輸出a,b的值

a = 5
b = 3

第四、左移運算符(<<)

運算規則:

1、左移可看作 整數M乘以2的N次方
2、"<<"右邊的數字就是N,左邊的數字就表示這個整數M

注意:
移動的數字必須是整數

例如:
二進制移位:3 << 4

 3(0000 0011)待移位的數字
 6(0000 0110)左移第一位,左移一位之後,最右邊的將會缺失,所以不足位數,補一位0,最左邊將會多出一位,所以舍掉一位
12(0000 1100)左移第二位,最右邊再補一位0,最左邊再舍掉一位
24(0001 1000)左移第三位,最右邊再補一位0,最左邊再舍掉一位
48(0011 0000)左移第四位,最右邊再補一位0,最左邊再舍掉一位

乘法運算:3 << 4

 = 3 * 2⁴ 
 = 3 * 16 
 = 48

第五、右移運算符(>>)

1、右移可看作 整數M除以2的N次方
2、"<<"右邊的數字就是N,左邊的數字就表示這個整數M

注意:

1、移動的數字必須數整數
2、右移之後的數字還是整數,不能得到浮點型數值,不能被2的N次方整數的數字,將會丟失精度,得到的結果只會保留整數部分,小數部分會被自動舍掉

例如:
二進制移位:8 >> 2

8(0000 1000)待右移的數字
4(0000 0100)右移第一位,最左邊將會缺失一位,不足位數補一位0,最右邊將會多出一位,所以舍掉最右邊的一位
2(0000 0010)右移第二位,最左邊再補一位0,最右邊再舍掉一位

除法運算:8 >> 2

= 8 / 2²
= 8 / 4
= 2

第六、換位取反運算符(~)

備註:
換位取反比較複雜,目前對於計算機存儲負值的情況還不是很明確,這裏從網絡上找到一個獲得取反的公式,這個公式我親測過,得到的結果時正確的,這裏不做過多的講解,這塊以後弄明白了之後再做補充

~a = -(a + 1)

運算規則:

1、遇到0時,結果爲1
2、遇到1時,結果爲0

參考:
換位取反運算符其他大咖的解讀思路

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章