使用規則:兩個二進位制運算元對應位同為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語言的位運算子有六種,分別是 右移運算子 左移運算子 按位與運算子 按位或運算子 按位異或運算子 按位取反運算子 這些運算子都是對於基本資料型別的二進位制位進行操作的,這裡我們只討論整型資料型別的位運算 二.各個運算子的具體使用 右移運算子 將整數的二進位制形式整體向右移動...