【问题标题】:!0 guaranteed to be 1 in C89?!0 在 C89 中保证为 1?
【发布时间】:2016-02-16 18:28:56
【问题描述】:

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

它只是“除了 0”和 1 之外的任何值,还是依赖于编译器?

【问题讨论】:

  • 产生逻辑布尔结果的内置运算符(<><=>===!=&&||!) 总是准确地产生 01,类型为 int。某些库函数,如 isdigit(),返回 0 为 false 或任何非零值为 true。

标签: c language-lawyer c89


【解决方案1】:

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

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

【讨论】:

  • 你能在链接中添加你找到这个的地方吗?
【解决方案2】:

正如霍布斯在他的回答中所说,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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-05
    • 1970-01-01
    • 2012-03-28
    • 2019-06-03
    • 2018-09-26
    • 1970-01-01
    • 2013-11-30
    • 1970-01-01
    相关资源
    最近更新 更多