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

标签 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;
}

最佳答案

Why is the output False if -8 & 7 is not 0?

答:实际上 0。

详细来说,& 是按位 AND 运算符,您需要检查参数的二进制表示形式。

考虑two's complement代表,

  • -8 具有表示 1111111111111000
  • 7 具有表示 0000000000000111

根据按位与的规则,产生的结果是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 block 被执行,并且您会看到 False 被打印出来。

关于c - 如果 -8 & 7 不为 0,为什么输出为 False?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53374269/

相关文章:

c - 如何检查C中的空数组

c++ - 为什么使用 block \网格而不是 for 循环?

c - 如何将 C 代码转换为汇编的十六进制表示形式?

c# - 帮助进行位运算

c++ - 为什么将 xor 与文字而不是反转一起使用(按位不是)

C 编程位表示

c - Lex:标识符与整数

java - 表达式 Java boolean 值的非法开始?

c++ - 位掩码开关语句

c++ - 有没有更有效的方法来获取以字节为单位的 32 位整数的长度?