!0 在 C89 中保证为 1?

!0 guaranteed to be 1 in C89?

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

它只是 "anything but 0" 和 1 还是依赖于编译器?

The result of the logical negation operator ! is 0 if the value of its operand compares unequal to 0, 1 if the value of its operand compares equal to 0. The result has type int.

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

正如霍布斯在他的回答中所说,section 6.5.3.3.5 of the C standard 指出 !0 的计算结果为 1

此外,此行为可用于通过表达式 !!x.

将整数规范化为布尔值(即 01
  • x = 0, !!x = !!0 = !1 = 0.
  • x != 0, !x = 0, 所以!!x = !0 = 1