我知道在C语言中,如果语句和比较为False=0,其他任何东西都等于true。
因此,

int j = 40
int k = !j

k == 0 // this is true

我的问题正好相反。怎么了!0变成?1个?
int l = 0
int m = !l

m == ? // what is m?

最佳答案

c中的布尔/逻辑运算符必须产生0或1。
根据ISO C99标准第6.5.3.3/5节:
逻辑求反运算符!的结果为0(如果其操作数的值比较不等于0),如果其操作数的值比较不等于0,则结果为1。
实际上,!!x是一个常用的习惯用法,用于强制值为0或1(不过,我个人更喜欢x != 0)。
另请参见Q9.2 from the comp.lang.c FAQ

07-24 09:44
查看更多