使用 x >= 0 还是 x > -1 更好



我在任何地方都找不到这个看似简单的问题的答案。使用x>=0或x>-1将整数与0进行比较更好吗?

我相信这两种方式都不会有明显的区别,但更好地理解内部工作原理会很有趣。我特别谈论的是Java,但如果其他语言不同,那就很有意思了。当我说更好时,我指的是效率,很明显,x>=0更容易阅读。

由于问题无法回答,您一直无法找到答案。

我在字节码指令中看到过像if (i > 50) i=50这样的代码编译成这样:

Address         Hex             Opcode              Operand
....
0000002D        3B              istore_0
0000002E        10 32           bipush              50
00000030        A4 00 06        if_icmple           pos.00000036
00000033        10 32           bipush              50
00000035        3B              istore_0
00000036        ....

if_icmple:如果value1小于或等于value2,则分支到分支偏移量处的指令

显然,编译器将if (i > 50) i=50转换为类似于:if (i <=50),跳过赋值i=50如果它更有效,我不知道,但它确实表明,像你建议的那样更改表达式是无用的,因为编译器可能会在编译时更改表达式或反转If语句。

此外,我的CPU不理解java字节码,但java字节码将由jit编译器转换为机器代码。你猜怎么着。。。jit编译器也可以进行优化。因此,即使查看java字节码也不会得出结论。由于您不知道我将在哪个CPU或jvm上运行您的程序,所以您根本不知道!

(即使你知道答案,为这样的微观优化牺牲可读性也不是一个好主意。收益很小,代价很大!)

在这种情况下,这实际上并不重要。在处理整数时,x >= 0x > -1之间的差异是无关的。

现在,这并不是说没有任何区别。>=检查"大于或等于",而>只检查"大于"。现在,如果您在这里处理浮点数和整数,那么您肯定希望使用x >= 0,因为对于-1 < x < 0所在的任何负x值,以及0和正数,x > -1都将求值为true。

现在,我个人建议,在必须在>=>(或<=<)之间进行选择的任何情况下,在使用浮点数时都要选择正确的。尽管严格处理整数在技术上并不重要,但在使用整数时,最好始终考虑两者之间的差异,即使在使用任何一个都会产生相同结果的情况下也是如此。

相关内容

  • 没有找到相关文章

最新更新