BitArray以错误的方式返回位?

这段代码:

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

给我以下输出:

 11100000 

不应该是相反的方式吗? 像这样:

 00000111 

我知道有一点点大端,尽管这些术语只涉及字节的位置。 据我所知,它们不会影响比特。

BitArray的文档说明:

数组中的第一个字节表示第0到第7位,第二个字节表示第8到第15位,依此类推。 每个字节的最低有效位表示最低索引值:“bytes [0]&1”表示位0,“bytes [0]&2”表示位1,“bytes [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 }传递给构造函数new byte[] { 45, 90 }因为你首先传递它最不重要。 打印出来时,它将按索引顺序显示为: 1011010001011010 ,这与原始二进制表示法相反。

文档没有明确说明,但我想迭代器会从LSB迭代到MSB。 对我来说合理(个人而言!),除非你打印掉这些位。 我看了一下BitArray.GetEnumerator方法 。

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

它就像任何常规数组一样,为位操作添加了一些方法。 就像你有一个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,并且等等。