我知道在C中,对于if语句和比较,FALSE = 0,其他任何等于true.
因此,
int j = 40
int k = !j
k == 0 // this is true
Run Code Online (Sandbox Code Playgroud)
我的问题恰恰相反.什么!0成为?1?
int l = 0
int m = !l
m == ? // what is m?
Run Code Online (Sandbox Code Playgroud)
jam*_*lin 32
C中的布尔/逻辑运算符需要产生0或1.
根据ISO C99标准的第6.5.3.3/5节:
!如果其操作数的值不等于0,则逻辑否定运算符的结果为0;如果其操作数的值比较等于0则为1.
事实上,!!x将值强制为0或1是一种常见的习惯用语(不过我个人更喜欢x != 0).