位運算符筆記
十進制: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