如果-8&7不为0,为什么输出False?

时间:2018-11-19 12:04:22

标签: c bitwise-operators

如果-8&7不为0,为什么输出False?  我知道它应该是&&,但问题是“代码中是否有问题?它是什么?为什么输出为False?”有人可以帮忙吗?

#include <stdio.h>


int main ()
{
    if (-8 & 7) 
    {
        printf("Always\n");
    }
    else
    {
        printf("False\n");
    }
    return 0;
}

1 个答案:

答案 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被打印出来的原因。