我得到一个数字,例如 513。我需要将此数字转换为 bitmask32,然后我需要计算每个 1 位在数组中的位置
例如 513 = 0 和 9
我将如何将数字转换为 bit32 然后读取值?
现在我只是将数字转换为字符串二进制值:
string bit = Convert.ToString(513, 2);
会有更有效的方法来做到这一点吗?如何将值转换为位数组?
谢谢
var val = 513;
for(var pos=0;;pos++)
{
var x = 1 << pos;
if(x > val) break;
if((val & x) == x)
{
Console.WriteLine(pos);
}
}
如果您真的想保留位图,BitVector32 类是一个可以帮助您解决此问题的实用程序类。
using System.Collections;
int originalInt = 7;
byte[] bytes = BitConverter.GetBytes(originalInt);
BitArray bits = new BitArray(bytes);
int ndx = 9; //or whatever ndx you actually care about
if (bits[ndx] == true)
{
Console.WriteLine("Bit at index {0} is on!", ndx);
}
要测试编号中的 #i 位n
:
if ((n & (1 << i)) != 0)