反转按位移位操作符/ 2的幂

时间:2012-03-28 20:49:49

标签: c# bit-manipulation bitwise-operators bit-shift

我在C#程序中有以下简单的等式将数字转换为结果值:

sectorSize = 1 << sectorShift;

是否有某种反向操作可以让我走另一条路?

sectorShift = ???

我知道你可以实现一个循环,但这有点过分。我以前从来没有这样做,所以我不知道,我在网上找不到任何关于它的东西。当sectorSize是2的幂时,我需要的等式只需要产生有效的结果;域名的其他部分可以为我所关心的所有事情下地狱。

2 个答案:

答案 0 :(得分:11)

这里有五种方法可以做到这一点。将它们翻译成正确的C#留作练习。 要非常小心。

http://graphics.stanford.edu/~seander/bithacks.html#IntegerLogObvious

坦率地说,我个人总是会随波逐流。我不清楚为什么你认为简单而明显正确的代码是“过度杀伤”。

答案 1 :(得分:9)

对数。但由于您不想这样做,请使用循环和/或查找表。