我一直试图解决这个问题一段时间,但不能只用整数运算和按位运算符。但是,我认为它可能并且应该相当容易。我错过了什么?
问题:获取任意长度的整数值(这与问题无关),其 X 最低有效位设置为1,其余为0。例如,给定数字31,我需要得到一个等于0x7FFFFFFF的整数值(31个最低有效位为1,其余为0)。
当然,使用一个循环或者将移位的1乘以整数X次将完成这项工作。但这不是我正在寻找的解决方案。它应该更方向(X << Y - 1)
,因此不使用循环。
答案 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;