BitArray以错误的方式返回位
本文关键字:返回 方式 错误 BitArray | 更新日期: 2023-09-27 18:22:05
此代码:
BitArray bits = new BitArray(new byte[] { 7 });
foreach (bool bit in bits)
{
Console.WriteLine(bit ? 1 : 0);
}
给我以下输出:
11100000
不是应该反过来吗?像这样:
00000111
我知道有小端和大端,尽管这些术语只指字节的位置。据我所知,它们不会影响比特。
BitArray的文档状态:
数组中的第一个字节表示位0到7,第二个字节表示字节表示位8到15,依此类推。最低有效位每个字节的位表示最低索引值:"字节[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
,这是原始二进制表示法的反面。
文档中没有明确说明,但我猜迭代器会从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,依此类推