6種位運算子詳解和運用(c語言)

2021-10-25 04:17:27 字數 1621 閱讀 9904

使用規則:兩個二進位制運算元對應位同為1 結果位 才為1,其餘情況為0;

例如:整數 a = 15   整數 b = 127

計算:(a & b)

15 的二進位制位:0000 1111

127 的二進位制為:0111 1111

即:(a & b) = 15

使用規則:兩個二進位制運算元對應位只要有乙個為1 結果位 就為1,其餘情況為0;

例如:整數 b = 127   整數 c = 128

計算:(b | c)

127 的二進位制位:0111 1111

128 的二進位制位:1000 0000

即:(b | c) = 255

使用規則:乙個二進位制運算元,對應位為0,結果位為1;對應位為1,結果位為0;

作用是將每位二進位製取反

例如:整數 d = 1

計算:(~d)

十進位制 1 的二進位制表示為:

0000 0001

每位都取反為:

1111 1110

這是記憶體中的儲存形式。我們讀取的十進位制是根據原碼來讀取,而在記憶體中,數值都是以二進位制補碼形式儲存的。正數的補碼和原碼一樣,負數的補碼得到過程:原碼 轉 反碼 再轉 補碼

負數的補碼是在其原碼的基礎上, 符號位不變, 其餘各位取反, 最後+1. (即在反碼的基礎上+1)

傳送門:原碼, 反碼, 補碼 詳解

然後計算取反後的補碼,其真值就是結果。

即:(~d) = -2

使用規則:兩個二進位制運算元對應位相同為0,不同為1;

例如:整數 e = 2   整數 f= 3

計算:(e ^ f)

2 的二進位制位:0000 0010

3 的二進位制位:0000 0011

即:(e ^ f) = 1

將二進位製碼向左(右)移位

例如

char a=45;

char b=a<<2;

//左移

printf

("%d\n"

,b);

移位前: 0010 1101

移位後: 00|10 110100(後面補兩個0)

char a=45;

char b=a>>2;

//右移

printf

("%d\n"

,b);

移位前:0010 1101

移位後:000010 11|01(前面補兩個0)

如果是負數,則補1(windows系統)或者補0,所以為了保證**移植性,負數盡量不要位右移

位左移相當於乘以2^n次方

char a=4;

char b=a>>

2;

結果是b=4* 2*2=16

這樣運算遠比b=a* 2 *2效率更高

位右移相當於除以2^n次方然後取整,a為非負數

char a=4;

char b=a<<

2;

結果是b=4/2^2=1

&= |= ^= >>= <<=

和+=,-=是一樣的

C語言位運算子詳解

原碼 正數是其二進位制本身 負數是符號位為1,數值部分取x絕對值的二進位制 反碼 正數的反碼是其本身,對於負數其符號位不變其它各位取反 0變1,1變0 補碼 正數的補碼是其本身,負數的補碼是其反碼的基礎上 1。正數的補碼 反碼都是其本身 要弄懂位運算子的計算方法,首先必須明白二進位制數在記憶體中的存...

C 位運算子詳解 異或運算子和移位運算子

什麼是位運算 位運算子按二進位制進行運算,這些運算子只能用於整數型別的操作。如 char,short,int,longbqclwf 通過位運算子來獲取高位值和低位值 int a 0x1234 int high,low high a 8 0x00ff low a 0x00ff 左移運算子和www.cp...

C語言位運算子

一.c語言位運算子簡介 c語言的位運算子有六種,分別是 右移運算子 左移運算子 按位與運算子 按位或運算子 按位異或運算子 按位取反運算子 這些運算子都是對於基本資料型別的二進位制位進行操作的,這裡我們只討論整型資料型別的位運算 二.各個運算子的具體使用 右移運算子 將整數的二進位制形式整體向右移動...