C語言位操作初步

2021-09-06 10:51:35 字數 2578 閱讀 2119

位操作允許程式設計師對單獨的位進行操作,例如,早某些機器上,短整型佔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異或無變化,移位分 左 右 移,物件分 有 無符號數,只說一點 有符號數右移左側補符號位,叫算術移位,...