为什么!0等于1而不是-1?

时间:2015-03-20 22:19:10

标签: c logical-operators

以下代码

printf("!%d = %d\n", 0, !0);
printf("!%d = %d\n", 1, !1);
printf("!%d = %d\n", -1, !-1);

给出

!0 = 1
!1 = 0
!-1 = 0

现在,考虑到0 = 0x00000000,不应该!0 = 0xFFFFFFFF = -1(对于签名代表)? 这会在位域中使用int / long混乱,并立即反转所有内容。

这背后的原因是什么?是否只是为了避免!1被视为布尔true

1 个答案:

答案 0 :(得分:16)

原因是在标准C中,已经指定所有返回布尔值的运算符返回1或0.!0计算逻辑不为0,即1.逻辑不为1将为0。 / p>

您要使用的是按位NOT运算符,即~0应为0xFFFFFFFF == -1