參考:
https://zhuanlan.zhihu.com/p/404138226(知乎:位運算符的含義)
https://www.jianshu.com/p/f0dbabf5f08c(簡書:運算符的基本使用)
位運算符
1,共7種位運算符&,|,^,~,<<,>>,>>>
2,需要是二進制格式的數據,因為要按位運算
& 含義:按位與
說明:吧參與運算的兩個數對應的二進制位相與,只有對應的二進制位均為1時,結果的對應為才為1,否則為0。
例子:
9&5相當於00001001&00000101,運算結果為00000001.輸出結果是1。
場景:
1,判斷奇偶性
| 含義:按位或
說明:把參數運算的兩個數對應的二進制位相或,只要對應的兩個二進制位有一個為1時,其結果就為1.
例子:
9|5相當於00001001|00000101,運算結果就是00001101,輸出結果是13。
1|2|4|8相當於0001|0010|0100|1000,運算結果就是00001111,輸出結果是15。
場景:
1,作為標志位
^ 含義:按位異或
說明:把參數運算的兩個數對應的二進制位相異或,對應位上的兩個二進制數字不同時,結果為1,否則為0。
例子:
1^1=0,1^0=1,0^0=0,0^1=1
~ 含義:取反
說明:把運算數的各個二進制位按位求反,本運算符最令人費解,且沒找到使用場景
參考:http://www.edu118.com/news/20190426/jswz090506.html
計算方法(十進制表示):~x = -(x+1)
例子:
~9相當於~(00001001),運算結果11110110。輸出結果為-10。 ~-9相當於~(11110111),運算結果00001000。輸出結果為8。 1,因為計算機是用補碼表示負數 2,負數的補碼為反碼+1 3,負數的反碼為 除符號位(第一位)外其他位取反
<< 含義:左移
說明:m<<n是指把m對應的二進制數的各個二進制位向左移n位,高位丟棄,低位用0補齊。
例子:
設a=3,a<<4指把00000011的各二進制位向左移動4位,結果為00110000(十進制48)。
>> 含義:右移
說明:m>>n是指把m對應的二進制數的各二進制位向右移n位,低位丟棄,高位用0補齊,符號被保留。
例子:
設a=15,a>>2表示把00001111右移2位,結果為00000011(十進制3)。
>>> 含義:無符號右移
說明:m>>>n是指把m對應的二進制數的各二進制位向右移n位,低位丟棄,高位用0補齊。
例子:
19>>>2產生4,因為10011移位2位向右變為100,它是4。對非負數值,補零右移和帶符號右移產生相同結果。
原碼、反碼、補碼
參考:https://blog.csdn.net/chenchao2017/article/details/79733278(原碼,反碼,補碼原理)
現在計算機普遍使用補碼表示負數。
正數的原碼、反碼、補碼相同
123的原碼:00000000 00000000 00000000 01111011 123的反碼:00000000 00000000 00000000 01111011 123的補碼:00000000 00000000 00000000 01111011
負數的原碼是按照絕對值轉換后,最高位補1;反碼是除符號位外,所有位取反;補碼為反碼加1;
-123的原碼:10000000 00000000 00000000 01111011 -123的反碼:11111111 11111111 11111111 10000100 -123的補碼:11111111 11111111 11111111 10000101
使用場景
作為標志位
舉例:
red = 0001 blue = 0010 yellow = 0100 0111:代表紅藍黃 0101:代表紅黃