如何将整数转换为bool数组(表示整数中的二进制位)?例如:
4 = { true, false, false }
7 = { true, true, true }
255 = { true, true, true, true, true, true, true, true }
如何将整数转换为bool数组(表示整数中的二进制位)?例如:
4 = { true, false, false }
7 = { true, true, true }
255 = { true, true, true, true, true, true, true, true }
int
应该能够映射到 BitVector32
(或 BitArray
)。
int i = 4;
var bv = new BitVector32(i);
bool x = bv[0], y = bv[1], z = bv[2]; // example access via indexer
个人认为,我会直接使用移位运算符(>>
等)并将其保留为一个int
。 bool[]
数组会更加占用空间。
var bools = new BitArray(new int[] { yourInt }).Cast<bool>().ToArray();
new int[yourInt]
应该改为 new int[]{yourInt}
- Albin SunnanboyourInt
是 255,它不会创建一个长度为8且全部为true的数组,甚至不会创建一个长度为32且最后8个为true的数组,它将创建一个长度为8160且全部为false的数组。 - Guffanew(size)
,这正是它在int
构造函数中所做的。话虽如此,它也曾经困扰过我。 - Matt MitchellInt32 number = 10;
var array = Convert.ToString(number, 2).Select(s => s.Equals('1')).ToArray();
--编辑--
使用扩展方法:
public static class Int32Extensions
{
public static Boolean[] ToBooleanArray(this Int32 i)
{
return Convert.ToString(i, 2 /*for binary*/).Select(s => s.Equals('1')).ToArray();
}
}
使用方法:
var boolArray = number.ToBooleanArray();
public static bool[] Convert(int[] input, int length)
{
var ret = new bool[length];
var siz = sizeof(int) * 8;
var pow = 0;
var cur = 0;
for (var a = 0; a < input.Length && cur < length; ++a)
{
var inp = input[a];
pow = 1;
for (var i = 0; i < siz && cur < length; ++i)
{
ret[cur++] = inp > 0 ? (inp & pow) != 0 : (inp & pow) == 0;
pow *= 2;
}
}
return ret;
}
你可以将这个过程分为两步,首先使用Convert.ToString
将整数转换为二进制(基于2的)字符串表示,然后遍历该字符串以填充一个BitArray
。
例如:
int someInt = 7;
string binaryString = Convert.ToString(someInt, 2);
BitArray bitArray = new BitArray(binaryString.Length);
for (int i = 0; i < bitArray.Length; i++)
{
bitArray[i] = (binaryString[i] == '1');
}
BitArray
有一个构造函数,可以接受一个整数数组作为参数。 - Matt MitchellBitArray
轻松地从一个数字中获取布尔值的集合:var b = new BitArray(new int[] { 255 });
然而,它将使用值中的所有位,因此上述代码将以32位作为int
数据类型的长度来获取BitArray
。
您可以从字节创建BitArray
,这将使您从每个字节获得八个布尔值:
var b = new BitArray(new byte[] { 255 });
通过跳过前导的假值,您可以获得仅包含有效位的数组:
bool[] b = new BitArray(42).Cast<bool>().SkipWhile(x => !x).ToArray();