!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
.
将整数规范化为布尔值(即 0
或 1
)
- 当
x
= 0
, !!x
= !!0
= !1
= 0
.
- 当
x
!= 0
, !x
= 0
, 所以!!x
= !0
= 1
。
我已经搜索了标准,但没有注意到提到的部分。
它只是 "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 typeint
.
出现在 C89/C90、C99 和 C11 中。
正如霍布斯在他的回答中所说,section 6.5.3.3.5 of the C standard 指出 !0
的计算结果为 1
。
此外,此行为可用于通过表达式 !!x
.
0
或 1
)
- 当
x
=0
,!!x
=!!0
=!1
=0
. - 当
x
!=0
,!x
=0
, 所以!!x
=!0
=1
。