!0保证在C89中为1?

时间:2016-02-16 18:28:57

标签: c language-lawyer c89

我已经搜索了标准,但没有注意到上述部分。

它只是"除了0"和1还是编译器相关的?

2 个答案:

答案 0 :(得分:23)

  

逻辑否定运算符!的结果是0,如果其操作数的值比较不等于0,1如果其操作数的值比较等于0.结果具有类型int

出现在C89 / C90,C99和C11中。

答案 1 :(得分:4)

正如霍布斯在答案中所说,section 6.5.3.3.5 of the C standard指出!0评估为1

此外,此行为可用于将整数规范化为具有表达式0的布尔值(即1!!x)。

  • x = 0时,!!x = !!0 = !1 = 0
  • x!= 0!x = 0时,!!x = !0 = 1