我的问题似乎很简单,但我一直对此感到困惑:
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 汇编的时期,在该时期 anot eax, eax
会按位执行而不是eax
(相当于eax = ~eax
C 中的)。