我在我的C#程序中有以下简单的方程式,用于将一个数字转换为相应的值:
sectorSize = 1 << sectorShift;
是否有一种反向操作可以使我反过来做同样的事情?
sectorShift = ???
我知道你可以用循环实现,但这有点过火了。我以前从未遇到过这种情况,所以不知道该怎么做,也在网上找不到任何关于它的信息。我只需要的方程式在sectorSize为2的幂时才能产生有效结果;其他范围对我来说都无所谓。
我在我的C#程序中有以下简单的方程式,用于将一个数字转换为相应的值:
sectorSize = 1 << sectorShift;
是否有一种反向操作可以使我反过来做同样的事情?
sectorShift = ???
我知道你可以用循环实现,但这有点过火了。我以前从未遇到过这种情况,所以不知道该怎么做,也在网上找不到任何关于它的信息。我只需要的方程式在sectorSize为2的幂时才能产生有效结果;其他范围对我来说都无所谓。
以下是在C语言中实现这五种方法的方式。将它们翻译成正确的C#程序留作练习。一定要非常小心。
http://graphics.stanford.edu/~seander/bithacks.html#IntegerLogObvious
坦白地说,我个人总是选择使用循环。我不明白为何您认为简单且显然正确的代码是“过度”的。
1 << i
与输入进行比较的循环,可能会在处理大量输入时出现问题。 - CodesInChaos对数。但是如果您不想使用对数,可以使用循环和/或查找表。
<<
是左移,>>
是右移。 - Marc B(Int32.MaxValue << 1) >> 1 != Int32.MaxValue
。 - Chris Shain