我的问题看似简单,但我一直对此感到困惑:
bool myBool = TRUE;
if (myBool) printf("1 myBool = true\n");
else printf("1 myBool = false\n");
myBool = !myBool;
if (myBool) printf("2 myBool = true\n");
else printf("2 myBool = false\n");
printf("%d\n", TRUE);
printf("%d\n", FALSE);
所有这些输出:
1 myBool = true;
2 myBool = false;
1
0
我明白为什么这是输出。我的问题是 !1
怎么会等于 false
?因为在 C 和 C++ 中,if
检查非零值。我最后一次检查:
TRUE = 0x00000001
FALSE = 0x00000000
因此:
!TRUE = !0x00000001 = 0xfffffffd != 0
编辑:我想这种困惑源于我学习 x86 汇编的时期,其中 not eax, eax
会执行 bit-wise 而不是 eax
(相当于 C 中的 eax = ~eax
)。
最佳答案
您混淆了逻辑非和按位补码。如果输入非零,则 !
运算符返回 0,否则返回 1。 ~
运算符翻转输入的位。这意味着 !0 = 1
和 !1 = 0
,这在使用 ~
时是不正确的。
此外,请记住 if
语句检查值是零还是非零。因此,即使 boolean 值的值为 0xFFFFFFFE
,它在 if 语句中的计算结果仍为 true
。
希望对你有帮助
关于c - 了解 boolean 值上的 "not",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11425477/