C語言中的位運算

2021-06-20 19:48:19 字數 2252 閱讀 1764

c語言具有位邏輯運算和移位運算的獨特功能,參與位運算的運算量必須是整數。位邏輯運算包括&、|、∧、~四種運算,移位運算有<<、>>兩種運算。其中~為單目運算子。

一、位邏輯運算:

1.「&」:按位與。參與運算的量,如果相對應的兩位(二進位制表示)都為1,則該位的結果值為1,否則為0,即:

0&0==0 

0&1==0 

1&0==0 

1&1==1

如:int a=10,b=6,c= a & b;

即:a:00000000 00000000 00000000 00001010

b:00000000 00000000 00000000 00000110

c:00000000 00000000 00000000 00000010

所以,c=2。.

2.「|」:按位或。參與運算的量,如果相對應的兩位(二進位制表示)都為0,則該位的結果值為0,否則為1,即:

0|0==0 

0|1==1 

1|0==1 

1|1==1

如:int a=10,b=6,c= a | b;

即:a:00000000 00000000 00000000 00001010

b:00000000 00000000 00000000 00000110

c:00000000 00000000 00000000 00001110

所以,c=14。.

3.「^」:按位異或。參與運算的量,如果相對應的兩位(二進位制表示)相異,則該位的結果為1,否則為0,即:

0∧0==0 

0∧1==1 

1∧0==1 

1∧1==0

如:int a=10,b=6,c= a ^ b;

即:a:00000000 00000000 00000000 00001010

b:00000000 00000000 00000000 00000110

c:00000000 00000000 00000000 00001100

所以,c=12。.

4.「~」:按位取反(單目運算子)。將參與運算量的相對應位(二進位制表示)的值取反,即1變0,0變1。

如:int a=10,c= ~a;

即:a:00000000 00000000 00000000 00001010

取反:11111111 11111111 11111111 11110101(該數為負數,此二進位制為其補碼,應求其原碼形式)

原碼:10000000 00000000 00000000 00001011(符號位不變,補碼的反碼再加1)

即-11。

所以,c=-11。.

二、移位運算:

1.「<<」:按位左移。將乙個運算量的各位(二進位制表示)依次左移若干位,低位補0,高位捨棄不要。注意:位移操作的右運算元必須小於左運算元的位長度,否則結果未定義。

如:int a=10,c= a<<2;

即:a:00000000 00000000 00000000 00001010

c:00000000 00000000 00000000 00101000

所以,c=40。

2.「>>」:按位右移。將乙個運算量的各位(二進位制表示)依次右移若干位,低位被移出,高位對無符號數補0,對有符號數要按最高符號位自身填補(即右移後符號不變)。注意:位移操作的右運算元必須小於左運算元的位長度,否則結果未定義。

如:int a=-10,c= a>>2;

即:a:00000000 00000000 00000000 00001010

a的補碼:11111111 11111111 11111111 11110110

c的補碼:11111111 11111111 11111111 11111101

c的原碼:10000000 00000000 00000000 00000011

所以,c=-3。

3.移位運算的算數規律:在一定的取值範圍內(高位不能移出二進位制數的有效數字1),將乙個整數(無論是正數還是負數)左移1位相當於乘以2;右移運算沒有取值範圍的限定,但有正負數之別。對於正數,右移1位相當於除以2,小數部分截掉;對於負數,右移1位相當於除以2;小數部分四捨五入。由於計算機做移位比做乘法快得多,編譯器可以利用這一點進行優化。

三、位運算的復合賦值運算子:&=(位與賦值)、|=(位或賦值) 、∧= (位異或賦值) 、>>=(按位右移賦值)、<<= (按位左移賦值)。

如a>>=2等價於a=a>>2。

C語言中的位運算

0 推薦 在電腦程式中,資料的位是可以操作的最小資料單位,理論上可以用 位運算 來完成所有的運算和操作。一般的位操作是用來控制硬體的,或者做資料變換使用,但是,靈活的位操作可以有效地提高程式執行的效率。c語言提供了位運算的功能,這使得c語言也能像組合語言一樣用來編寫系統程式。位運算子c語言提供了六種...

C語言中的位運算

c語言中的位運算有六個 按位與 按位或 按位異或 取反 左移 右移 除 以外其餘均為二元運算子,即要求運算子兩側均有乙個運算量 位運算量只能為整型或字元型,不能為實型資料。1.按位與 0 0 0 0 1 0 1 0 0 1 1 1 3 5 00000011 00000101 00000001 1 的...

C語言中的位運算

在電腦程式中,資料的位是可以操作的最小資料單位,理論上可以用 位運算 來完成所有的運算和操作。一般的位操作是用來控制硬體的,或者做資料變換使用,但是,靈活的位操作可以有效地提高程式執行的效率。c語言提供了位運算的功能,這使得c語言也能像組合語言一樣用來編寫系統程式。位運算子c語言提供了六種位運算子 ...