一道C语言的题目 不明白

来源:百度知道 编辑:UC知道 时间:2024/05/24 15:03:05
#include <stdio.h>

void main ()
{
printf("0 & 0 is %d\n", 0 & 0);
printf("0 & 1 is %d\n", 0 & 1);
printf("1 & 1 is %d\n", 1 & 1);
printf("1 & 2 is %d\n", 1 & 2);
printf("15 & 127 is %d\n", 15 & 127);
}
为什么最后一条printf语句的输出结果是15。。
解释一下你的过程。。

15的二进制表示为 00001111
127的二进制表示为01111111
当15与127进行"与运算",也即 15 & 127时,这两个数的每一二进制位分别进行对比,如果都为1则为1,否则为0.这两个数的与运算的结果为如下:
00001111
01111111 &
---------------------
00001111

将二进制结果再转换为10进制的数时,即为15,所以最后输出15是正确的.

15和127都自动转成2进制进行位与运算,然后输出10进制的结果.

计算机算出来的,应该是正确的.

127二进制是111111111和15与运算当然是不变啦