2016-05-15 34 views
-1

我一直无法找到这个看似简单的问题。使用x> = 0或x> -1来比较整数为0会更好吗?使用x> = 0或x> -1更好吗?

我确定它不会以任何方式造成显着差异,但是理解内部运作会更有趣。我特别谈论Java,但是如果其他语言不同,知道它会很有趣。当我说得更好时,我的意思是在效率方面,显然x> = 0更容易阅读。

+4

我敢肯定,为现代的CPU有'> ='和'>'的CPU指令。因此,您的决定应该提高可读性而不是性能。 – Turing85

+0

也许一些分析是有序的,但基于上述Turing85的观察,我应该想象x> = 0 – saml

+1

由于基础测试基于<0,<= 0,== 0,所以在任何语言中, != 0,> = 0和> 0。 – MikeJRamsey56

回答

1

您一直无法找到答案,因为问题无法解答。

我见过像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:如果数值1小于或等于值2,转移到指令在branchoffset

因此很明显, ,编译器将if (i > 50) i=50翻译为:if (i <=50),跳过作业i=50如果效率更高,我不知道,但它确实表明像你所建议的更改表达式是无用的,因为编译器可能会在编译时更改表达式或反转if语句。

此外,我的CPU不理解java字节码,但java字节码将被jit编译器转换为机器码。并猜测什么...... jit编译器也可以进行优化。所以即使看java的字节码也不会定论。而且由于你不知道将要运行你的程序的CPU或者jvm,你根本就不知道!

(即使你能知道答案,牺牲可读性微优化一样,是不是一个好主意。好处是非常小的,在一个伟大的代价!)

+0

这正是我期待的,谢谢! – Prime624

1

在这种情况下它并不重要。处理整数时,x >= 0x > -1之间的区别是不相关的。

现在,这并不是说没有任何区别。 >=检查“大于或等于”,而>只检查“大于”。现在,如果您在这里处理浮点数和整数,那么您肯定会想要使用x >= 0,因为x > -1将针对任何负x值(其中-1 < x < 0以及0和正数)评估为真。现在

,我个人建议是,在你有>=>(或<=<)之间做出选择,你选择了一个与浮点数工作时,这将是正确的任何情况下。尽管严格地处理整数在技术上并不重要,但是在使用它们时始终考虑两者之间的差异是一种好的做法,即使在使用两者都会导致相同结果的情况下也是如此。

相关问题