这段代码:
BitArray bits = new BitArray(new byte[] { 7 });
foreach (bool bit in bits)
{
Console.WriteLine(bit ? 1 : 0);
}
给我以下输出:
11100000
不应该反过来吗?像这样:
00000111
我知道有小端和大端,尽管这些术语仅指字节的位置。据我所知,它们不会影响位。
这段代码:
BitArray bits = new BitArray(new byte[] { 7 });
foreach (bool bit in bits)
{
Console.WriteLine(bit ? 1 : 0);
}
给我以下输出:
11100000
不应该反过来吗?像这样:
00000111
我知道有小端和大端,尽管这些术语仅指字节的位置。据我所知,它们不会影响位。
BitArray的文档指出:
数组中的第一个字节表示位 0 到 7,第二个字节表示位 8 到 15,依此类推。每个字节的 Least Significant Bit 表示最低索引值:“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 }
因为你首先传递它是最不重要的。打印出来时,它将按索引顺序显示为:1011010001011010
,这是原始二进制表示法的反面。
文档没有明确说明,但我猜迭代器从 LSB 迭代到 MSB。对我来说听起来很合理(就个人而言!),除非你打印出来。我看了一下BitArray.GetEnumerator Method。
不,它是位数组,而不是表示为位的数值。
它就像任何常规数组一样,为位操作添加了一些方法。就像你有一个 int 数组一样。您不会期望它的顺序相反,它只是逐个位置。
例如:
转换为 a 的数字(以字节为单位)BitArray
将如下所示:
2 = 01000000
5 = 10100000
8 = 00010000
等等
它只存储值的位置,但不是相对的,除了二进制数值。
这是描述您正在使用的构造函数的链接:
http://msdn.microsoft.com/en-us/library/b3d1dwck.aspx
关键点是:
第一个值数组元素中的数字表示位 0 到 31,数组中的第二个数字表示位 32 到 63,依此类推。每个整数的 Least Significant Bit 表示最低索引值:“values [0] & 1”表示第 0 位,“values [0] & 2”表示第 1 位,“values [0] & 4”表示第 2 位,以及很快。