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
posted @ 2020-08-13 14:40  爵企  阅读(432)  评论(0)    收藏  举报