2010-03-26 24 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