Java中的>>和>>>右移运算符之间是否有性能差异?

7
有没有理由认为Java中的有符号右移运算符(>>)和无符号右移运算符(>>>)会有不同的表现?我在我的机器上无法检测出任何区别。
这纯粹是一个学术问题;我确定它永远不会成为瓶颈。我知道:最好首先写下你的意思;例如,使用>>进行除以2的操作。
我认为这归结于哪些体系结构实现了哪些操作作为指令。

我认为两者最终都会转换为本地CPU指令(逻辑/算术右移),需要相似的周期。 - kennytm
4
不要使用除以2的符号,而是使用“/ 2”进行除法运算。 - Mark Byers
1
+1 让我查找 >>> 运算符。不要低估编译器所做的优化。通常在这个级别进行优化甚至可能会使事情变得更糟。 - Thirler
2
最好不要使用>>进行除以2的操作。代码是为人类而非计算机设计的。计算机会将“/2”翻译成移位操作。 - Pyrolistical
1
当然,如果你试图找到两个正整数的平均值,请使用 >>>,否则可能会发生整数溢出。 - Tom Hawtin - tackline
显示剩余2条评论
1个回答

4
您的编译器将把这些内容转换为字节码,JVM将解释适用于您体系结构的字节码。我认为可以安全地假设您的体系结构具有包括在几个时钟周期内完成操作的操作指令集。
无论如何,这些运算符的行为存在差异,因此不能互换使用。

@Tim Bender:+1... 在x86世界中,">> 1"自P4以来只有一个周期,而自P6架构以来">> any"也只有一个周期,据我所知。 - SyntaxT3rr0r
我想那就是我的问题:常见的架构是否都实现了这两个指令?是的,就像我说的,只有在行为相同的情况下才适用(非负整数)。 - Sean Owen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接