【问题标题】:BitArray returns bits the wrong way around?BitArray 以错误的方式返回位?
【发布时间】:2012-02-22 10:07:26
【问题描述】:

这段代码:

BitArray bits = new BitArray(new byte[] { 7 });
foreach (bool bit in bits)
{
    Console.WriteLine(bit ? 1 : 0);
}

给我以下输出:

11100000

不应该反过来吗?像这样:

00000111

我知道有小端和大端,尽管这些术语仅指字节的位置。据我所知,它们不会影响位。

【问题讨论】:

    标签: c# enumeration bitarray


    【解决方案1】:

    documentation for BitArray 声明:

    数组中的第一个字节表示位 0 到 7,第二个字节 byte 表示位 8 到 15,依此类推。最不重要的 每个字节的位代表最低的索引值:“bytes [0] & 1” 表示位 0,“字节 [0] & 2”表示位 1,“字节 [0] & 4” 表示位 2,依此类推。

    当索引位时,约定是从最低有效端开始,当以二进制表示时,它是右侧。但是,在枚举数组时,您从索引 0 开始,因此它们从左到右而不是从右到左打印出来。这就是它向后看的原因。

    例如,单词 01011010 00101101 (90 45) 将被索引为:

     0  1  0  1  1  0  1  0  -  0  0  1  0  1  1  0  1
    -----------------------    -----------------------
    15 14 13 12 11 10  9  8     7  6  5  4  3  2  1  0
    

    你会将它作为new byte[] { 45, 90 } 传递给构造函数,因为你首先传递它是最不重要的。打印出来时,它会按索引顺序显示为:1011010001011010,与原来的二进制符号相反。

    【讨论】:

      【解决方案2】:

      文档没有明确说明,但我猜迭代器从 LSB 迭代到 MSB。对我来说听起来很合理(就个人而言!),除非你打印出来。我看过BitArray.GetEnumerator Method

      【讨论】:

        【解决方案3】:

        不,它是位数组,而不是表示为位的数值。

        它就像任何常规数组一样,添加了一些用于位操作的方法。就像你有一个 int 数组一样。你不会期望它的顺序相反,它只是一个位置一个位置。

        例如:

        转换为BitArray 的数字(以字节为单位)将如下所示:

        2 = 01000000
        5 = 10100000
        8 = 00010000
        

        等等

        它只存储值的位置,但不是相对的,除了二进制数值。

        这是描述您正在使用的构造函数的链接:

        http://msdn.microsoft.com/en-us/library/b3d1dwck.aspx

        重点是:

        第一个值数组元素中的数字代表位 0 到 如图 31 所示,数组中的第二个数字表示位 32 到 63,并且 很快。 每个整数的最低有效位代表最低 索引值:“values [0] & 1”代表位0,“values [0] & 2” 表示第 1 位," values [0] & 4" 表示第 2 位,以此类推。

        【讨论】:

          猜你喜欢
          • 2016-02-21
          • 2018-09-03
          • 2022-06-29
          • 2016-11-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多