我一直無法找到這個看似簡單的問題。使用x> = 0或x> -1來比較整數爲0會更好嗎?使用x> = 0或x> -1更好嗎?
我確定它不會以任何方式造成顯着差異,但是理解內部運作會更有趣。我特別談論Java,但是如果其他語言不同,知道它會很有趣。當我說得更好時,我的意思是在效率方面,顯然x> = 0更容易閱讀。
我一直無法找到這個看似簡單的問題。使用x> = 0或x> -1來比較整數爲0會更好嗎?使用x> = 0或x> -1更好嗎?
我確定它不會以任何方式造成顯着差異,但是理解內部運作會更有趣。我特別談論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
:如果數值1小於或等於值2,轉移到指令在branchoffset
因此很明顯, ,編譯器將if (i > 50) i=50
翻譯爲:if (i <=50)
,跳過作業i=50
。如果效率更高,我不知道,但它確實表明像你所建議的更改表達式是無用的,因爲編譯器可能會在編譯時更改表達式或反轉if語句。
此外,我的CPU不理解java字節碼,但java字節碼將被jit編譯器轉換爲機器碼。並猜測什麼...... jit編譯器也可以進行優化。所以即使看java的字節碼也不會定論。而且由於你不知道將要運行你的程序的CPU或者jvm,你根本就不知道!
(即使你能知道答案,犧牲可讀性微優化一樣,是不是一個好主意。好處是非常小的,在一個偉大的代價!)
這正是我期待的,謝謝! – Prime624
在這種情況下它並不重要。處理整數時,x >= 0
和x > -1
之間的區別是不相關的。
現在,這並不是說沒有任何區別。 >=
檢查「大於或等於」,而>
只檢查「大於」。現在,如果您在這裏處理浮點數和整數,那麼您肯定會想要使用x >= 0
,因爲x > -1
將針對任何負x值(其中-1 < x < 0
以及0和正數)評估爲真。現在
,我個人建議是,在你有>=
和>
(或<=
和<
)之間做出選擇,你選擇了一個與浮點數工作時,這將是正確的任何情況下。儘管嚴格地處理整數在技術上並不重要,但是在使用它們時始終考慮兩者之間的差異是一種好的做法,即使在使用兩者都會導致相同結果的情況下也是如此。
我敢肯定,爲現代的CPU有'> ='和'>'的CPU指令。因此,您的決定應該提高可讀性而不是性能。 – Turing85
也許一些分析是有序的,但基於上述Turing85的觀察,我應該想象x> = 0 – saml
由於基礎測試基於<0,<= 0,== 0,所以在任何語言中, != 0,> = 0和> 0。 – MikeJRamsey56