2010-03-26 89 views
5

是否曾有理由認爲Java中的>>(帶符號)和>>>(無符號)右移位運算符的性能會有所不同?我無法檢測到我的機器上有任何差異。Java >>和>>>右移運算符之間的任何性能都不同嗎?

這純粹是一個學術問題;我肯定它永遠不會成爲瓶頸。我知道:最好寫下你最重要的東西;例如,使用>>除以2。

我認爲這取決於哪些體系結構將哪些操作實現爲指令。

+0

我認爲兩者最終都會轉換爲本地CPU指令(邏輯/算術右移),這會花費相似的週期。 – kennytm 2010-03-26 20:45:31

+4

不,使用'/ 2'除以2. – 2010-03-26 20:54:57

+1

+1使我查找>>>運算符。並且不要低估編譯器所做的優化。通常在這個級別進行優化甚至會讓事情變得更糟。 – Thirler 2010-03-26 21:02:32

回答

3

編號 您的編譯器會將它們轉換爲字節碼,並且JVM將爲您的體系結構解釋字節碼。我認爲假設你的架構有一個包含兩個操作的指令集在幾個時鐘週期內完成是安全的。

無論如何,這些操作符的行爲有所不同,所以它不像您可以交換它們。

+0

@Tim Bender:+1 ...在x86世界中,*「>> 1」*因爲P4只有一個週期,並且自P6架構*「>> any」*只有一個週期AFAIK。 – SyntaxT3rr0r 2010-03-26 21:35:26

+0

我認爲這是我的問題:常見的體系結構是否都作爲一個指令來實現?是的,就像我說過的,這隻適用於行爲相同的情況(非負整數)。 – 2010-03-26 22:00:44