回答
微小差別,但if ($n <= $x)
表現得更加明顯。
不知道爲什麼有人低估了這個,所以+1反擊它。 – 2010-08-02 18:48:47
爲什麼這是最有價值的?這甚至沒有正確回答這個問題,第二個更有效。 – 2010-08-02 19:17:12
我的答案的重點是,它不會在所有問題上感到困擾,你應該更喜歡清晰的語法。我猜想有10人同意。 – Triptych 2010-08-02 19:20:15
大概($n <= $x)
因爲少了一個操作(沒有扣除)。但是,這隻對整數有效,差異很可能不重要。
如果您使用的語言沒有自動選擇更高效的說明,那麼您應該記錄針對您的語言實施的錯誤優化錯誤。 – 2010-08-02 19:49:41
@Bernd嚴重嗎?...我懷疑減法可以很容易地進行優化,特別是在C中,對於兩個ints而言'n-1
Yikes!我沒有想到溢出。然後再說兩件事:OP是關於PHP的,而C中的溢出行爲是未定義的。因此,一個(C)編譯器可以合理地將'n-1
在你而在第二個您要執行只有一個(比較)執行兩個操作(減法然後比較)的第一個實例。我認爲可以肯定地說第二個更高性能。無論如何,第一種形式非常不規範,我不知道爲什麼它會被用來替代第二種形式。
由於您使用的是高級腳本語言,因此執行該操作不是處理器操作的問題。更多的時間將花在解析代碼,驗證變量類型和管理變量內存等許多事情上。
即使沒有實際的區別,我猜第二個會更快,因爲語言表達更簡單。
術語$ N-1是在更復雜的理解< =一個部分。數學運算符只有幾個選項(>,<,< =,==,> =,!=,...),但術語$ n-1需要更復雜的分析,因爲它必須由減去在第一符號,然後進行分析兩個部分(其也可以是一個函數調用,一個常量,變量,另一個複雜的表達,...)
都不是。 PHP沒有強制實施,表示它是字節碼,直接從AST中解釋,或編譯成機器碼。實際上,有十億種不同的實現,主要的實現可能會隨着語言和API的其他部分一直髮生變化。
即使在x86的程序集級別,這兩種操作也沒有區別。證明:
X <ý
cmp eax, y
jb its_true
X < = Y
cmp eax, y
jbe its_true
JBE
是同義詞類似JC
IIRC,其中只檢查一個單一的標誌。這兩個條件分支只是檢查一個標誌是否設置。
這些操作可能會影響速度的唯一真正方法是您可以重載小於/大於運算符和相等性,即使如此,速度差異也應該可以忽略不計。
- 1. 使用什麼(x < n || x > n)而不是(x!= n)?
- 2. (x << 13)^ x是什麼意思?
- 3. 是(x <= y)或! (x> y)更有效率?
- 4. 爲什麼x <= x false?
- 5. N&(1 << x)== true是什麼時候?
- 6. (1U << X)做什麼?
- 7. 替代n的[X | X < - [1..N]]
- 8. 什麼是x =(10 <n)的Python等價物? 10:n;
- 9. 解釋方法(X << n) | (x > >>(32 - N))
- 10. python3有什麼區別? <x>和python3。 <x> m
- 11. 爲什麼通常地圖<X, X> =新的HashMap <X, X>()而不是HashMap <X, X> = new HashMap <X, X>()?
- 12. Hash [x] <<「string」做什麼?
- 13. 什麼意義 「×[] < - as.integer(X)」
- 14. <?或<?php ---有什麼區別?
- 15. colnames(x [1])< - 「name」和colnames(x)[1] < - 「name」之間的區別是什麼?
- 16. 對於1-D`X`,`X [n]`和`X [...,n]`有什麼區別?
- 17. Haskell中的x <-x是什麼意思?
- 18. std :: cout << x;和std :: cout << x << std :: endl;?
- 19. x << a + x << b帶括號和不帶括號的區別是什麼
- 20. 什麼是「this.x = x <0?0:x; this.y = y <0?0:y;」意思?
- 21. 在Python中,爲什麼寫round(x [,n])而不是round(x,n)?
- 22. 快速找到最小的n,這樣對於X <= n * n
- 23. 什麼是PHP中的「<<< SQL」?
- 24. 爲什麼f <$> g <$> x等於(f。g)<$> x儘管<$>不是正確聯想?
- 25. 爲什麼std :: set :: lower_bound(x)(有效)被定義爲最小數字> = x而不是最大數字<= x?
- 26. Func <x,y>和Method(x,y)有什麼區別?
- 27. scalac -explaintypes:什麼是「<notype><:X?」意思?
- 28. 有什麼辦法讓expression()顯示P(a <= X <= b)?
- 29. Php <<<是什麼意思?
- 30. <?php,<?, <?=,有什麼區別?
使用'<='可能更好,因爲它就是這樣。另外,我猜測它效率稍高一點,但不夠重要。 – Adrian 2010-08-02 18:46:39
同樣,雖然'<='讀取「小於或等於」,但這並不意味着計算機執行兩個單獨的操作來實現此目的。看到這個答案:http://stackoverflow.com/questions/1430706/comparison-efficiency/1430713#1430713 – 2010-08-02 18:49:43
今天所有的微觀優化問題是什麼? – Malfist 2010-08-02 19:04:26