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

abo*_*u00 5 c# bit-manipulation bit-shift bitwise-operators

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

sectorSize = 1 << sectorShift;
Run Code Online (Sandbox Code Playgroud)

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

sectorShift = ???
Run Code Online (Sandbox Code Playgroud)

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

Eri*_*ert 11

以下是在C中执行此操作的五种方法.将它们翻译为正确的C#是一种练习.要非常小心.

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

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


Ign*_*ams 10

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

  • 更具体一点:x = 1 << n表示x = 2 ^ n.要从x获得n,您必须计算n = Log(x,2). (7认同)