Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 计算X位位掩码的最快方法?_C#_Algorithm_Integer_Bit Manipulation_Math - Fatal编程技术网

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

C# 计算X位位掩码的最快方法?,c#,algorithm,integer,bit-manipulation,math,C#,Algorithm,Integer,Bit Manipulation,Math,我试图解决这个问题已经有一段时间了,但仅仅使用整数算术和位运算符是不行的。然而,我认为这是可能的,而且应该相当容易。我错过了什么 问题是:获取任意长度的整数值(这与问题无关),其X最低有效位设置为1,其余为0。例如,给定数字31,我需要得到一个等于0x7FFFFFFF的整数值(31个最低有效位为1,其余为零) 当然,使用循环或将1移位为整数X次就可以了。但这不是我想要的解决方案。它应该更多地朝着(X的方向发展,我认为以下几点应该有效: int mask = (int)Math.Pow(2, 31

我试图解决这个问题已经有一段时间了,但仅仅使用整数算术和位运算符是不行的。然而,我认为这是可能的,而且应该相当容易。我错过了什么

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


当然,使用循环或将1移位为整数X次就可以了。但这不是我想要的解决方案。它应该更多地朝着
(X的方向发展,我认为以下几点应该有效:

int mask = (int)Math.Pow(2, 31) - 1;
这是一个单一的数学表达式,但它不是特别有效,因为用这种方法计算幂并不是一个好主意。但是,由于我们计算的幂为2,我们可以使用shift做同样的事情:

int mask = (1 << 31) - 1;
intmask=(1试试这个:(1试试这个:

uint.MaxValue >> (32 - something)

涉及浮点数和到
int
的转换可能不符合“最快”的条件……是的,我在发布初始版本后就意识到了如何纠正这一点,但与此同时,@doublep已经发布了该解决方案。我想我将我的版本留在这里,因为它解释了让我到达那里的思考过程:-).不应该,只要你先把1投给uint(不知道C,所以不知道怎么投)。然后它将被计算为0-1,即32位机器上的32 1。您有我正在寻找的解决方案。简单明了,没有任何循环。当X等于整数的位长度时,所有位都会按预期变成1。它甚至适用于X=0的情况。谢谢。