当两个幂时,如何将一个除法变成一个按位移位?

chr*_*tek 5 java algorithm bit-manipulation bitwise-operators

我有以下需要经常做的部门:

int index = pos / 64;
Run Code Online (Sandbox Code Playgroud)

分区在cpu级别可能很昂贵.我希望有一种方法可以通过按位移位来实现.我也想了解你如何从分裂到转换,换句话说,我不想只记住按位表达式.

Gen*_*ene 7

int index = pos >> 6会这样做,但这是不必要的.任何合理的编译器都会为你做这类事情.当然Sun/Oracle编译器会.

一般规则是i/(2^n)可以实现的i >> n.同样i*(2^n)i << n.

如果i签名,您需要关注负数表示.例如,二进制补码产生合理的结果(如果右移是算术 - 符号位被复制).有条理的幅度没有.

  • 编译器只会在文字的情况下进行优化.如果它是变量,它将不会优化任何内容,您可以通过逻辑轻松强制执行变量是2的幂.然后你自己做优化. (3认同)