我有以下需要经常做的划分:
int index = pos / 64;
除法在 cpu 级别可能是昂贵的。我希望有一种方法可以通过按位移位来做到这一点。我还想了解如何从除法到移位,换句话说,我不想只记住按位表达式。
最佳答案
int index = pos >> 6
会这样做,但这是不必要的。任何合理的编译器都会为您做这种事情。 Sun/Oracle 编译器当然会。
一般规则是 i/(2^n)
可以用 i >> n
来实现.同样i*(2^n)
是i << n
.
如果 i
,您需要关注负数表示已签署。例如。二进制补码产生合理的结果(如果右移是算术 - 复制符号位)。带符号的幅度没有。
关于java - 2的幂时如何将除法变成按位移位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13784685/