为什么 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
等于11111000
,7
等于00000111
11111000
&
00000111
========
00000000
即二进制 AND 运算产生错误结果。
7
在二进制中表示为00000111
。 -8
在二进制中表示为 11111000
。按位与运算对每一位进行与运算:
00000111
&
11111000
=
00000000
因此,if 条件为假。
当我尝试 运行 以下代码时,它打印 "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
等于11111000
,7
等于00000111
11111000
&
00000111
========
00000000
即二进制 AND 运算产生错误结果。
7
在二进制中表示为00000111
。 -8
在二进制中表示为 11111000
。按位与运算对每一位进行与运算:
00000111
&
11111000
=
00000000
因此,if 条件为假。