计算X位位掩码的最快方法?

时间:2010-04-18 23:31:40

标签: c# algorithm integer bit-manipulation math

我一直试图解决这个问题一段时间,但不能只用整数运算和按位运算符。但是,我认为它可能并且应该相当容易。我错过了什么?

问题:获取任意长度的整数值(这与问题无关),其 X 最低有效位设置为1,其余为0。例如,给定数字31,我需要得到一个等于0x7FFFFFFF的整数值(31个最低有效位为1,其余为0)。

当然,使用一个循环或者将移位的1乘以整数X次将完成这项工作。但这不是我正在寻找的解决方案。它应该更方向(X << Y - 1),因此不使用循环。

3 个答案:

答案 0 :(得分:6)

试试这个:(1&lt;&lt; X) - 1

答案 1 :(得分:2)

试试这个:

uint.MaxValue >> (32 - something)

答案 2 :(得分:0)

我认为以下内容应该有效:

int mask = (int)Math.Pow(2, 31) - 1;

这是一个单一的数学表达式,但它并不是特别有效,因为以这种方式计算功率并不是一个好主意。但是,由于我们计算的是2的幂,我们可以使用shift做同样的事情:

int mask = (1 << 31) - 1;