3 回答
TA贡献1816条经验 获得超6个赞
请注意,原始版本if(10 < a < 0)完全合法。它只是没有做您可能(合理地)认为的事情。您很幸运,编译器将其识别为可能的错误并就此警告您。
该<运营商联营左到右,就像+操作。因此,正如a + b + c真正的意思(a + b) + c,a < b < c真正的意思(a < b) < c。所述<,如果条件为假,1,如果它是真实的操作者产生的0 int值。因此,您正在测试0小于c还是1小于c。
在不太可能的情况下,这实际上是您想要执行的操作,添加括号可能会使警告消失。这还将使以后阅读您的代码的任何人都知道您知道自己在做什么,因此他们不会“修复”它。(同样,这仅适用于您真正想要的不太可能发生的事件(a < b) < c)。)
检查是否a小于b和b小于的方法c是:
a < b && b < c
(有些语言(包括Python)在数学中通常是a < b < c手段,即手段a<b && b<c,而C恰好不是这些语言之一。)
TA贡献1876条经验 获得超7个赞
第一个进行比较,然后将第一个结果与第二个值进行比较。在这种情况下,操作员组从左到右分组,所以等效于(10<a) < 0。它给出的警告确实是因为<始终会产生0或1。警告是告诉您,第一次比较的结果永远不会小于0,因此第二次比较将始终产生false。
即使编译器不会抱怨它,第二点也没有太大的改进。一个数字如何同时小于0但大于10?理想情况下,编译器会警告您该条件始终为假。想必你想0<a<10和a>0 && a<10。
您可以只使用一个比较就可以得到第二个效果:if ((unsigned)a < 10)仅当数字在0..10范围内时才为真。通常可以使用以下代码将范围比较简化为单个比较:
if ((unsigned)(x-range_start)<(range_end-range_start))
// in range
else
// out of range.
曾经这是体面的汇编语言编程的主要内容。我怀疑许多人是否会再做(我当然不这样做)。
- 3 回答
- 0 关注
- 444 浏览
添加回答
举报