目錄
& --- 按位與操作符
按位與操作符運用規則
按位與操作符相關代碼
按位與操作符相關代碼驗證
| --- 按位或操作符?
按位或操作符運用規則
按位或操作符相關代碼
?按位或操作符相關代碼驗證
^ --- 按位異或操作符
按位異或操作符運用規則
按位異或操作符相關代碼
按位異或操作符相關代碼驗證?
- 按位與、或、異或操作符的操作數必須是整數
- 按位是按二進制位操作的,也就是按數據存在內存中的補碼進行與、或、異或操作
- 關于整數補碼的相關知識請見:整數的二進制表示形式:原碼、反碼、補碼-CSDN博客
& --- 按位與操作符
按位與操作符運用規則
對應二進制位有0則為0,兩個同時為1,才是1
按位與操作符相關代碼
int a = 3;
int b = -5;int c = a & b;printf("%d\n", c);
?3存儲在變量a的補碼 和 (-5)存儲在變量b的補碼如下圖:
?由以上a和b的補碼得出a & b:
- (a & b)的最高位為0,說明為正整數,且正整數的原碼、反碼、補碼相同
- (a & b)的二進制轉換十進制:1*2^0 + 1*2^1 = 3
- 所以(a & b)的值存儲在變量c中,以%d的形式打印出來為3
按位與操作符相關代碼驗證
| --- 按位或操作符?
按位或操作符運用規則
對應的二進制位有1則1,兩個同時為0,才為0
按位或操作符相關代碼
int a = 3;
int b = -5;int c = a | b;printf("%d\n", c);
結合以上的繪圖,先計算出(a | b)的補碼
?(a | b)的補碼為負整數,負整數的補碼到原碼是需要計算的
(a | b)的原碼存儲到變量c中,c所存儲的值為:-5
?按位或操作符相關代碼驗證
^ --- 按位異或操作符
按位異或操作符運用規則
對應的二進制位相同為0,相異為1
按位異或操作符相關代碼
int a = 3;
int b = -5;int c = a ^ b;printf("%d\n", c);
計算(a ^ b)的補碼
(a ^ b)的補碼為負整數,計算出原碼
由此可得(a ^ b)的原碼存儲的變量c中的值為:-8