为什么if(-8&7)返回false

ble*_*150 0 c bitwise-operators bitwise-and

当我尝试运行以下代码时,它显示“ FALSE”而不是“ TRUE”。有人可以解释为什么代码返回false吗?

#include <stdio.h>

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

Vla*_*cow 7

-8可以通过以下方式表示(我将使用字节表示形式

8  = 00001000
~8 = 11110111
-8 = 11111000 (~8 + 1)
Run Code Online (Sandbox Code Playgroud)

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

所以-8等于111110007等于00000111

11111000
&
00000111
========
00000000
Run Code Online (Sandbox Code Playgroud)

二进制AND运算会得出错误的结果。