如果-8&7不为0,为什么输出False? 我知道它应该是&&,但问题是“代码中是否有问题?它是什么?为什么输出为False?”有人可以帮忙吗?
#include <stdio.h>
int main ()
{
if (-8 & 7)
{
printf("Always\n");
}
else
{
printf("False\n");
}
return 0;
}
答案 0 :(得分:5)
如果-8&7不为0,为什么输出为False?
A:实际上是 0。
要详细说明,&
是按位AND运算符,您需要检查参数的二进制表示形式。
考虑使用two's complement表示形式,
-8
具有表示形式1111111111111000
7
具有表示形式0000000000000111
根据按位AND规则,产生的结果为0
,其结果为FALSY。因此,根据您的情况,if-else
条件可以归结为
if (0) // this is FALSE
{
printf("Always\n");
}
else // else block gets executed
{
printf("False\n"); // so this is printed
}
这就是为什么执行else
块并看到False
被打印出来的原因。