位操作允許程式設計師對單獨的位進行操作,例如,早某些機器上,短整型佔16位,位操作將每一位單獨操作。
位操作允許程式設計師設定、清除、測試與其他的操作,這些操作如下表:
操作含義&
按位與|
按位或^
按位異或~取反
<<
左移》右移這些操作用於整型或者字元型
1、按位與(&)
bit1
bit2
bit1 & bit200
0010
1001
11通常我們可把按位「與」操作 & 作為關閉某位(即將該位置0)的手段,例如我們想要關閉a數中的第3位,而又不影響其它位的現狀,可以用乙個數0xf7,即二進位制數1111 0111去與a數作按位「與」運算:
0x88 1000 1000 a數
& 0xf7 1111 0111 遮蔽數
= 1000 0000
注意,這個數除第3位為0外,其它各位均為1,操作的結果只會將a數中的第3位置0,而a數的其它位不受影響。也就是說,若需要某個數的第n位關閉,只需要將該數與另乙個數按位相與,另乙個數除了相應的第n位為0外,其它各位都為1,以起到對其它各位的遮蔽作用。
應用舉例:判斷乙個數字的奇偶性
由於在二進位制下,當最後乙個數字為0,則此數字為偶數,若為1則此數為奇數
**如下:
int even(const intvalue)
2、按位或(|)
bit1
bit2
bit1 | bit200
0011
1011
11通常我們可把按位「或」操作 | 作為置位(即將該位置1)的手段,例如我們想要將a數中的第0位和1位置1,而又不影響其它位的現狀,可以用乙個數0x03,即二進位制數00000011去與a數作按位「或」運算:
0x88 1000 1000 a數
| 0x03 0000 0011 遮蔽數
= 1000 1011
注意,這個數除第0、1位為1外,其它各位均為0,操作的結果只會將a數中的第0、1位置1,而a數的其它位不受影響。也就是說,若需要某個數的第n位置1,只需要將該數與另乙個數按位相「或」,另乙個數除了相應的第n位為1外,其它各位都為0,以起到對其它各位的遮蔽作用。
3、按位異或(^)
bit1
bit2
bit1 ^ bit200
0011
1011
10按位「異或」運算 ^ 具有一些特殊的應用,介紹如下:
① 按位「異或」運算可以使特定的位取反
例如:我們想讓a數中的最低位和最高位取反,只要用0x81,即二進位制數10000001去與它作按位「異或」運算,其運算結果同上式。經過操作後,最高位的值已經由1變0,而最低位的值也已經由0變1,起到了使這兩位翻轉的效果。其它位的狀態保持不變。
可以看到,這個數除最低位、最高位為1外,其它各位均為0,操作的結果只會將a數中的第0、7位取反,而a數的其它位不受影響。也就是說,若需要某個數的第n位取反,只需要將該數與另乙個數按位相「異或」,另乙個數除了相應的第n位為1外,其它各位都為0,以起到對其它各位的遮蔽作用。上面的運算可以用a = a ^ (0x81) 來表示,也可以用a ^ =(0x81) 來表達。
② 直接交換兩個變數的值
首先,a ^ = b:
a 0000 0011
^ b 0000 0100
a = 0000 0111
其次,b ^ = a:
b 0000 0100
^ a 0000 0111
b = 0000 0011
最後,a ^ = b:
a 0000 0111
^ b 0000 0011
a = 0000 0100
這樣,a、b兩個變數中的值就進行了對調。
4、按位取非(~)
bit~bit01
105、左移操作(<<)與右移操作(>>)
對於x,x<>n相當於x/(2^n)
6、右移操作詳解:
右移操作相當的詭異,當乙個變數進行右移操作,c語言需要填充左邊空的位元位
然而對於有符號變數,c使用符號位,如下表:
signed char
signed char
unsigned char
表示式9>>2
-8>>2
248>>2
binary value>>2
0000 1010>>2
1111 1000>>2
1111 1000>>2
結果??00 0010
??11 1110
??11 1110
填充sign bit(0)
sign bit(1)
0最終結果(二進位制)
0000 0010
1111 1110
0011 1110
最終結果(短整型)2-2
62
C語言位操作
在電腦程式中,資料的位是可以操作的最小資料單位,理論上可以用 位運算 來 完成所有的運算和操作。一般的位操作是用來控制硬體的,或者做資料變換使用,但是,靈活的位操作可以有效地提高程式執行的效率。c語言提供了位運算的功 能,這使得c語言也能像組合語言一樣用來編寫系統程式。位運算子c語言提供了六種位運算...
c語言位操作
位運算 and與 有一位為0 運算就為0 想獲取高四位,a a 0xf0 簡寫 a 0xf0 清零 一三五七位清零 a a 0x55 檢測位 檢測第三位 a a 0x04 遮蔽高四位,保留低4 位 a a 0x0f 統計2進製a中1的個數 1 include2 int main 3 11 print...
C語言位操作
朱老師物聯網大講堂 學習筆記 1 位與 只有1 1才是1,其餘全是0,位或 只有0 0才是0,其餘全是1,位取反 按位操作,位異或 1 0 1 0 1 1,也就是說相異結果是1,與1異或會取反,與0異或無變化,移位分 左 右 移,物件分 有 無符號數,只說一點 有符號數右移左側補符號位,叫算術移位,...