使用>>有什么好处?运营商结束/运营商?它广泛用于我维护的代码中。
例如,
int width = previousWidth >> 2;
答案 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);
这显然是由不同的位数移动的。你真的想要在分裂方面表达吗?
当然,当你真正想要的是除法时,为了便于阅读,你应该使用除法运算符。有些人可能会为了性能而使用位移,但与以往一样,对于大多数代码而言,可读性比微优化更重要。因此,在您的情况下,如果width
为previousWidth
所需的 除以4,则代码应*绝对反映:
int width = previousWidth / 4;
在证明性能差异很大之后,我才对此进行比特移位。
答案 1 :(得分:0)
他们是不同的行动:
>> 2
将位模式向右移动两位(基本上将 整数 除以2 ^ 2 = 4)。/ 2
将数字除以2(可以实现为>> 1
)。请注意,使用>> 1
将其他数字类型除以2可能会产生意外结果。
如果您的意思是“除以2”,请键入“/ 2”。阅读你的代码的人(包括你,一段时间后)会感谢你没有掩盖其含义。
答案 2 :(得分:0)
很可能一点也不。将分区转换为位移是一种JVM优化。
如果正在使用位掩码,那么很好,但如果在上面的情况下,它似乎是一种编写数学运算的笨拙方式,那么考虑将其更改为维护的一部分(或者只是接受它作为一个坏的想法,但不管它。)
答案 3 :(得分:0)
正如其他人已经说过的那样,除非你
,否则我建议你总是喜欢比优化更可读的选项