我已經看過幾次了,但在我看來,使用按位左移會阻礙可讀性。爲什麼使用?它比只乘以2還快嗎?使用'<< 1'而不是'* 2'有沒有優勢?
回答
在舊編譯器中,通過發出左移指令不優化* 2調用的速度更快。該優化非常容易檢測,並且任何體面的編譯器都已經完成。
如果它影響可讀性,那就不要使用它。總是先以最簡潔明瞭的方式編寫代碼,然後如果遇到速度問題,請返回並進行配置文件並進行手動優化。
對於某些體系結構,位移比乘法快。然而,任何值得其鹽值的編譯器都會優化* 2(或任何乘以2的冪)到左位移位(當位移將更快時)。
如果您使用的是舊C編譯器,則最好使用按位。爲了可讀性,你可以評論你的代碼。
您應該在乘法時使用*,並且在位移時使用< <。它們在數學上是等價的,但是具有不同的語義含義。例如,如果您正在構建標誌字段,請使用位移。如果您正在計算總數,請使用乘法。
非常好的一點。如果你想把位移到一個位置,使用'<< 1'。如果你想讓一個數字大兩倍,使用'* 2'。同樣的效果,但更清楚你使用的號碼。 – nickf 2009-09-21 04:09:02
+1。在你的代碼中表達你的** intent **,不要嘗試再次猜測編譯器(除非你已經對代碼進行了剖析並確定這樣做或者另一種方式會在性能上產生重大影響)。 – 2009-09-21 17:08:17
當您關注您正在使用的數據的各個位時,會使用它。例如,如果你想設置一個字0x9A
的高字節,你不會寫
n |= 0x9A * 256
你會寫:
n |= 0x9A << 8
這使得它更清晰,你正在使用位,而不是它們所代表的數據。
對於用作位字段值的可讀性:
enum Flags { UP = (1<<0),
DOWN = (1<<1),
STRANGE = (1<<2),
CHARM = (1<<3),
...
我認爲這是優選任一 '= 1,...,= 2,... = 4' 或「= 1,.. 。= 2,= 2 * 2,... = 2 * 3',特別是如果您有8個以上的標誌。
- 1. 使用.NET Framework 4.0 dll而不是2.0 dll有沒有優勢?
- 2. 使用hg convert合併2 repos而不是hg pull -f有沒有優勢?
- 3. C++優化,使用>而不是<=
- 4. 是VAR | = 1 << 2; reverisble?
- 5. ValueError異常:NUM必須爲1 <= NUM <= 2,而不是3
- 6. 爲什麼YouTube等使用<object>而不是<iframe>?
- 7. JSF 2.0:使用DataModel <T>而不是List <T>對於CRUD應用程序有沒有什麼優勢
- 8. 使用直接Rfc調用而不是BAPI有優勢嗎?
- 9. 對CRC有沒有優勢?
- 10. 使用bower而不是縮小javascript文件有什麼優勢?
- 11. 使用核心數據有什麼優勢? (而不是plist)
- 12. `Reduce`,而不是`<< - `
- 13. 有沒有什麼場合可以使用<style>而不是css文件?
- 14. 是否<input>沒有<form>?
- 15. 在R中使用`-1L`而不是`-1`有沒有危險?
- 16. SVN和Apache - 有沒有什麼優勢?
- 17. 返回ICollection <T>而不是列表<T>的真正優勢是什麼?
- 18. 以優化的方式計算0(x,y)對於0 <= x <= 1且1 <y <2的C++
- 19. 有BeautifulSoup輸出<br>而不是<br/>
- 20. 使用`<`而不是簡單地用<<來在XSLT中進行比較有什麼大不了的?
- 21. <svg><use>在邊緣沒有出現[角2]
- 22. 運行Powershell而不是VBScript有什麼優勢?
- 23. 使用HTML,而不<>
- 24. 嵌套的If/Else而不是Else If有什麼優勢?
- 25. PHP使我使用<?php而不是<?
- 26. 在ASP.NET中渲染<而不是<
- 27. 爲什麼IIS Express使用<system.web>而不是<system.webServer>?
- 28. 使用<OBJECT>而不是<IFRAME>和Internet Explorer
- 29. lazy_high_chart:如何使用'<'運算符發送evenet而不是'<'
- 30. 通過「function myfunc(<param here>)」在函數內部使用「param(<params here))有技術優勢嗎?
這很容易測試。只是測試它。 – 2009-10-29 22:30:54
怎麼樣?通過使用'時間'? – 2009-11-01 18:38:04