C# 反转按位移位运算符/二的幂

C# 反转按位移位运算符/二的幂,c#,bit-manipulation,bitwise-operators,bit-shift,C#,Bit Manipulation,Bitwise Operators,Bit Shift,在我的C#程序中,我有一个简单的方程式,可以将一个数字转换为结果值: sectorSize = 1 << sectorShift; 我知道你可以实现一个循环,但这有点过分了。我以前从来没有这样做过,所以我不知道,也无法在网上找到任何关于它的信息。当sectorSize是2的幂时,我需要的等式只需要产生有效的结果;域的其余部分可能会下地狱,我不在乎。对数。但既然您不想这样做,就使用循环和/或查找表。在C中有五种方法可以做到这一点。将它们转换为正确的C#只是一个练习要格外小心。 坦白

在我的C#程序中,我有一个简单的方程式,可以将一个数字转换为结果值:

sectorSize = 1 << sectorShift;

我知道你可以实现一个循环,但这有点过分了。我以前从来没有这样做过,所以我不知道,也无法在网上找到任何关于它的信息。当sectorSize是2的幂时,我需要的等式只需要产生有效的结果;域的其余部分可能会下地狱,我不在乎。

对数。但既然您不想这样做,就使用循环和/或查找表。

在C中有五种方法可以做到这一点。将它们转换为正确的C#只是一个练习要格外小心。


坦白地说,我个人会一直遵循循环。我不清楚为什么您认为简单且明显正确的代码是“过火的”。

与之相反?或者你是说别的什么?无论如何,位移位只能给你两次运算的能力<代码>是右移。@MattBurland技术上不正确。反向意味着“撤销另一个的功能”。由于Overfow,这在C#::
中并不总是适用(Int32.MaxValue>1!=Int32.MaxValue
“我知道可以实现循环,但这有点过分。”如何做一些简单易懂、清晰易懂、易于维护的事情,而做一些你甚至不了解的事情呢?不幸的是.net没有公开BSR/BitscanReverse指令。这是一条汇编指令,告诉你最高设置位的索引。更具体一点:x=1,循环一个必须是careful关于中止条件。您链接的向下循环没有遇到此类问题,但是一个向上计数并比较
1@CodeInChaos:Yep的循环。这就是为什么我说要非常小心。很容易出错。
sectorShift = ???