首页 > 解决方案 > C# - 将数字转换为最小 BitArray 的最快方法是什么

问题描述

我想将一个数字转换为一个 BitArray,生成的 BitArray 只是它需要的大小。

例如:

BitArray tooBig = new BitArray(new int[] { 9 });

产生一个长度为 32 位的 BitArray,但是对于值 9,只需要 4 位。我怎样才能创建只要它们需要的 BitArrays?所以在这个例子中,4 位。或者对于数字 260,我预计 BitArray 的长度为 9 位

标签: c#

解决方案


您可以先找出所有位,然后通过检查最低有效位是 1 还是 0,然后右移直到数字为 0 来创建数组。请注意,这不适用于第 32 位为 1 的负数到指示标志。

public BitArray ToShortestBitArray(int x)
{
    var bits = new List<bool>();
    while(x > 0)
    {
        bits.Add((x & 1) == 1);
        x >>= 1;
    }
    
    return new BitArray(bits.ToArray());
}

推荐阅读