2016-05-15 71 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和正數)評估爲真。現在

,我個人建議是,在你有>=>(或<=<)之間做出選擇,你選擇了一個與浮點數工作時,這將是正確的任何情況下。儘管嚴格地處理整數在技術上並不重要,但是在使用它們時始終考慮兩者之間的差異是一種好的做法,即使在使用兩者都會導致相同結果的情況下也是如此。

相關問題