什么是!0在C?

Rav*_*mer 18 c boolean

我知道在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).

另请参阅comp.lang.c FAQ中的Q9.2.

  • 用于指向标准的+1,但使用`!!`的代码需要直接进入垃圾箱. (4认同)
  • @Billy ONeal:在我看来,说"flagvar = !!(multibitFlag&BIT_OF_INTEREST);" 比"flagvar =((multibitFlag&BIT_OF_INTEREST)!= 0)更清晰;" 后一格式的额外冗长得到了什么? (4认同)
  • 好决定.看起来我们中的更多人需要真正阅读该死的ISO标准. (3认同)
  • @mathepic:是的,C89也是如此(第6.3.3.3节). (2认同)