位運算符筆記

位運算符筆記

十進制:42
對應二進制:
原碼:00000000000000000000000000101010
反碼:11111111111111111111111111010101
補碼:11111111111111111111111111010110
//補碼=原碼取反+1=反碼+1

  11111111111111111111111111010101
+                                1
  11111111111111111111111111010110

42取反(反碼):~42

按位與 & 運算

9 & 5

9=    1001
5=    0101
      0001    =1

9 & 5 =1

通常與255(11111111或十六進制0xFF)做&運算,高八位清 0 , 保留低八位

按位或 | 運算

9 | 5

 9=    00001001
 5=    00000101
       00001101    =13

按位異或 ^ 運算

9 ^ 5

9=      00001001
5=      00000101
        00001100    =12 

左移運算 <<

左移運算符“<<”是雙目運算符。左移n位就是乘以2的n次方。 其功能把“<<”左邊的運算數的各二進位全部左移若干位,由“<<”右邊的數指定移動的位數,高位丟棄,低位補0。
9<<3

9=        00001001
<<     00001001000   =72

右移運算 >>

右移運算符“>>”是雙目運算符。右移n位就是除以2的n次方
應該說明的是,對於有符號數,在右移時,符號位將隨同移動。當爲正數時, 最高位補0,而爲負數時,符號位爲1,最高位是補0或是補1 取決於編譯系統的規定。Turbo C和很多系統規定爲補1。
9>>3

9=     00001001
>>     00000001001   =1

-9>>3

-9=    10001001
>>     11100001001   =-777

計算的但不知道什麼時候用,有什麼作用,舉個例子
int color=0xffff0000;
要取出它的透明度只需要

color >> 24     就能得到FF

FFFF0000 轉成二進制: 111111111111111000000000000000
而>>24後結果:11111111 111111110000000000000000
轉成16進制既是:FF

無符號右移

無符號右移(>>>),就是在位移過程中不考慮符號因素,都做爲正數處理。符號位爲始終爲0
9>>>3 和-9>>>3等值

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