1. 程式人生 > 實用技巧 >C語言&位運算子

C語言&位運算子

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語言進位制規則

  1. 二進位制數中只有兩個字元0和1
  2. 八進位制:以0開頭,由0~7組成的數。如,0126,050000
  3. 十進位制:除表示正負的符號外,以19開頭,由09組成。如,128,+234,-278
  4. 十六進位制:以0X或0x開頭,由09,AF或a~f 組成。如,0x12A,0x5a00