为啥这个不等式在 C 中是 False 的? [复制]

Posted

技术标签:

【中文标题】为啥这个不等式在 C 中是 False 的? [复制]【英文标题】:Why is this inequality False in C? [duplicate]为什么这个不等式在 C 中是 False 的? [复制] 【发布时间】:2022-01-03 22:20:34 【问题描述】:

任何人都可以告诉我为什么 -5<-2<-1 在 C 中返回 0 而我希望它返回 1(True)?

printf("%d", -5<-2<-1);

【问题讨论】:

-5&lt;-2 为真,即等于 1。而1 &lt; -1 为假。 为什么你认为它应该是真的?我假设是因为您期望 -5&lt;-2&lt;-1 表示 (-5 &lt; -2) &amp;&amp; (-2 &lt; -1)。它不是。还有其他语言确实以这种方式工作,最著名的是 Python(它也只会评估一次 -2)。但在 C 中,-5&lt;-2&lt;-1 表示 (-5 &lt; -2) &lt; -1 我想你在找(-5 &lt; -2) &amp;&amp; (-2 &lt; -1) 谢谢大家。现在很清楚 【参考方案1】:

这个表达式

-5<-2<-1

等价于

( -5<-2 ) < -1

因为运算符

由于-5小于-2,那么子外显的值

( -5 < -2 )

是整数值1。所以你有

1 < -1

这个表达式的结果是 0,即逻辑假。

来自 C 标准(6.5.8 关系运算符)

6 每个运算符(大于)、=(大于或等于)如果 指定的关系为真,如果为假,则为 0。结果有类型 诠释

看来你的意思是- 5 &lt; -2 &amp;&amp; -2 &lt; -1

【讨论】:

以上是关于为啥这个不等式在 C 中是 False 的? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Python从1<2<3的语法糖说起

为啥在 numpy `nan == nan` 中是 False 而 [nan] 中的 nan 是 True?

js题集7

为啥 5.0/3 在 C 中是 1.666667?

为啥指向未定义结构的指针有时在 C 和 C++ 中是非法的

为啥一个变量对多个值的不等式检查总是返回真?