位運算符:含義與使用


參考:

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:代表紅黃

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM