使用>>運營商超過/運營商的優勢是什麼?它在我所維護的代碼中被廣泛使用。 對於例如 int width = previousWidth >> 2;
>>運營商超過/運營商的優勢
回答
當您想要將某個值移位一定數量的位時,理解起來會相當簡單。例如:
byte[] bits = new byte[4];
bits[0] = (byte) (value >> 24);
bits[1] = (byte) (value >> 16);
bits[2] = (byte) (value >> 8);
bits[3] = (byte) (value >> 0);
這顯然是由不同數量的位移位。你會真的想要在分裂方面表示呢?
現在當然,當你真正想要的是除法時,爲了可讀性的緣故,你應該使用除法運算符。有些人爲了性能可能會使用偏移,但是一如既往,對於大多數代碼而言,可讀性比微優化更重要。所以你的情況,如果有什麼實際上期望的是width
是previousWidth
除以4,代碼應該*絕對反映:
int width = previousWidth/4;
我只用bitshifting這個證明的性能差異後意義重大。
它們是不同的操作:
>> 2
移位的位模式的兩個位到右側(基本上分割的整數由2^2 = 4)。/ 2
將數字除以2(可以實現爲>> 1
)。
請注意,使用>> 1
將其他數字類型除以2可能會給出意想不到的結果。
如果您的意思是「除以二」,請鍵入「/ 2」。閱讀你的代碼的人(包括你,在一段時間之後)會感謝你沒有模糊意思。
我敢打賭,他的意思是'1'。 – 2013-02-13 08:19:49
@ Eng.Fouad:我敢打賭他的意思是'/ 2';) – Johnsyweb 2013-02-13 08:24:15
你是對的!我添加了這個代碼片段,僅僅爲 – Abichellam 2013-02-13 08:31:46
最有可能什麼也沒有。這將是一個JVM優化,將一個分區轉變爲bitshift。
如果它正在做一個位掩碼,那麼很好,但是如果在上面的情況下,它似乎是寫一個數學運算的一種尷尬的方式,然後考慮將它作爲維護的一部分進行更改(或者只是將它接受爲不好的主意,但保持獨立)。
nup ..這不會發生!..爲自己測試它 – Anirudha 2013-02-13 08:33:40
正如其他人已經說過,我建議你總是青睞在優化更具可讀性選項,除非你
- 肯定需要最優化
- 知道它的工作原理是
- 知道你的編譯器
- 知道你的JVM
- 把性能測量到位
- 考慮統計評估這些測量(極值,方差,第一次和以後的測量,......)
- 1. 超載運營商 - >
- 2. PHP - >運營商
- 3. Angular2 =>運營商
- 4. javascript「=>」運營商
- 5. C++流和運營商>>優先
- 6. Bigint運營商>>超載
- 7. 爲「運營商>>」曖昧超載
- 8. 轉換運營商和運營商>>
- 9. 運營商的模糊過載>>
- 10. 運營商超載的運營商優先級?
- 11. 使用運營商的 - > *
- 12. 的JavaScript =>運營商
- 13. 運營商的例子 - >超載
- 14. 運營商'。' VS ' - >' 在C++
- 15. ==運營商的成本vs < or >運營商
- 16. QVector <T>運營商=和運營商[]
- 17. Scala |運營商「=>」等這類運營商
- 18. 運營商優先?
- 19. 運營商優先
- 20. 運營商超載
- 21. 運營商=超載
- 22. 超載運營商=
- 23. istream&運營商的問題>>
- 24. 的Javascript運營商<< and >>
- 25. 運營商<< and >>重載
- 26. cygwin不承認>>運營商? C++
- 27. 不匹配運營商>>問題
- 28. 超載運營商新,沒有超載運營商刪除
- 29. 運營商的情況下運營商
- 30. 的JavaScript +運營商VS - 運營商
除非另有說明,否則認爲是優化。但也見http://stackoverflow.com/questions/1168451/is-shifting-bits-faster-than-multiplying-and-dividing-in-java-net – 2013-02-13 08:20:20
一個世紀以前的時間,這真的做了一個區別。今天,這可能意味着編寫這段代碼的人要麼是編程老手,要麼從舊書中學習,要麼試圖混淆你...... ;-) – Axel 2013-02-13 08:44:26