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语言进制规则
- 二进制数中只有两个字符0和1
- 八进制:以0开头,由0~7组成的数。如,0126,050000
- 十进制:除表示正负的符号外,以19开头,由09组成。如,128,+234,-278
- 十六进制:以0X或0x开头,由09,AF或a~f 组成。如,0x12A,0x5a00

浙公网安备 33010602011771号