为什么 if( -8 & 7) return false

Why does if( -8 & 7) return false

当我尝试 运行 以下代码时,它打印 "FALSE" 而不是 "TRUE" 有人可以解释为什么代码 returns false?

#include <stdio.h>

int main(void)
{
    if(-8 & 7)
    {
        printf("TRUE");
    }
    else
    {
        printf("FALSE");
    }
    return 0;
}

-8可以用下面的方式表示(我会用字节表示

8  = 00001000
~8 = 11110111
-8 = 11111000 (~8 + 1)

-8在补码表示中等于tp~8 + 1

所以-8等于111110007等于00000111

11111000
&
00000111
========
00000000

即二进制 AND 运算产生错误结果。

7在二进制中表示为00000111-8 在二进制中表示为 11111000。按位与运算对每一位进行与运算:

00000111
&
11111000
=
00000000

因此,if 条件为假。