如何将整数转换为布尔数组?

23

如何将整数转换为bool数组(表示整数中的二进制位)?例如:

4 = { true, false, false }
7 = { true, true, true }
255 = { true, true, true, true, true, true, true, true }
6个回答

19

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

个人认为,我会直接使用移位运算符(>>等)并将其保留为一个intbool[] 数组会更加占用空间。


3
BitVector……你永远不会知道框架内有哪些类……谢谢 :) - Ignacio Soler Garcia

12
你可以使用 BitArray
var bools = new BitArray(new int[] { yourInt }).Cast<bool>().ToArray();

new int[yourInt] 应该改为 new int[]{yourInt} - Albin Sunnanbo
如果 yourInt 是 255,它不会创建一个长度为8且全部为true的数组,甚至不会创建一个长度为32且最后8个为true的数组,它将创建一个长度为8160且全部为false的数组。 - Guffa
@Guffa:代码中有一个错误。请查看@Albin Sunnanbo的评论。如果我们按照@Albin的评论进行更正,那么数组大小为32。 - dhinesh
不是真正的错误,只是行为上的差异。大多数集合允许您使用new(size),这正是它在int构造函数中所做的。话虽如此,它也曾经困扰过我。 - Matt Mitchell

8
Int32 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();

4
需要注意的是,这将截断所有前导零。我不得不在我的布尔数组前面填充,直到它的长度为32。 - captncraig

1
    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;
    }

这个答案可以加一些解释。为什么'input'是一个整数数组? - kccricket
@kccricket,主题作者提出了一个问题。将int[]转换为bool[]。 - nim
1
@nim 作者要求的是“如何将 int 转换为 bool 数组?”,而不是“如何将 int 数组 转换为 bool 数组?”。该问题中的示例也是单个 int,而不是数组。 - Soulis

1

你可以将这个过程分为两步,首先使用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 Mitchell

0
您可以使用 BitArray 轻松地从一个数字中获取布尔值的集合:
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();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接