>>的优点运营商/运营商

时间:2013-02-13 08:15:05

标签: java

使用>>有什么好处?运营商结束/运营商?它广泛用于我维护的代码中。 例如, int width = previousWidth >> 2;

4 个答案:

答案 0 :(得分:7)

如果要将值移位一定数量的位,则理解起来要简单得多。例如:

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);

这显然是由不同的位数移动的。你真的想要在分裂方面表达吗?

当然,当你真正想要的是除法时,为了便于阅读,你应该使用除法运算符。有些人可能会为了性能而使用位移,但与以往一样,对于大多数代码而言,可读性比微优化更重要。因此,在您的情况下,如果widthpreviousWidth所需的 除以4,则代码​​应*绝对反映:

int width = previousWidth / 4;

在证明性能差异很大之后,我才对此进行比特移位。

答案 1 :(得分:0)

他们是不同的行动:

  • >> 2将位模式向右移动两位(基本上将 整数 除以2 ^ 2 = 4)。
  • / 2将数字除以2(可以实现为>> 1)。

请注意,使用>> 1将其他数字类型除以2可能会产生意外结果。

如果您的意思是“除以2”,请键入“/ 2”。阅读你的代码的人(包括你,一段时间后)会感谢你没有掩盖其含义。

答案 2 :(得分:0)

很可能一点也不。将分区转换为位移是一种JVM优化。

如果正在使用位掩码,那么很好,但如果在上面的情况下,它似乎是一种编写数学运算的笨拙方式,那么考虑将其更改为维护的一部分(或者只是接受它作为一个坏的想法,但不管它。)

答案 3 :(得分:0)

正如其他人已经说过的那样,除非你

,否则我建议你总是喜欢比优化更可读的选项
  • 绝对需要优化
  • 知道它的工作原理
    • 了解你的编译器
    • 了解你的JVM
    • 进行了绩效测量
    • 考虑这些测量的统计评估(极值,方差,首次与后期测量,......)