C語言&位運算子
阿新 • • 發佈:2020-08-13
C語言&位運算子
在學習&符號的時候,突然發現一個比較奇怪的事情
具體程式碼如下
#include <stdio.h>
int main()
{
int a,b;
a=77;
b=a&3;
printf("a & b(decimal) 為 %d \n",b);
b&=7;
printf("a & b(decimal) 為 %d \n",b);
return 0;
}
執行結果為
a & b(decimal) 為 3 a & b(decimal) 為 3
但是如果按照與運算的規則,則應該為
a= (0100 1101)B=77H
b= (0000 0011)B=3H
那麼通過與運算則得到 a&b= (0000 0001)B=1H
但是為什麼答案顯示是3呢?
這裡就涉及到C語言中的進製表示規則,由於77前面有一個0,所以表示的是八進位制也就是
a= (077)O=(0011 1111)B
所以a&b=(0000 0011)B=3H
C語言進位制規則
- 二進位制數中只有兩個字元0和1
- 八進位制:以0開頭,由0~7組成的數。如,0126,050000
- 十進位制:除表示正負的符號外,以19開頭,由09組成。如,128,+234,-278
- 十六進位制:以0X或0x開頭,由09,AF或a~f 組成。如,0x12A,0x5a00