2012-01-30 47 views
13

此代碼:BitArray以錯誤的方式返回位?

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

給我下面的輸出:

11100000 

它不應該是周圍的其他方式?像這樣:

00000111 

我知道有一些小的大端,儘管這些術語只是指字節的位置。據我所知,它們不影響位。

回答

9

documentation for 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,這與原始二進制表示法相反。

2

該文檔沒有明確說明它,但我想迭代器從LSB迭代到MSB。對我來說聽起來很合理(親自!),除非你打印出這些位。我看了一下BitArray.GetEnumerator Method

2

不,它是一個位數組,不是一個以位表示的數值。

它就像任何常規數組一樣添加了一些用於位操作的方法。就像你有一個int數組一樣。你不會期望它是在相反的順序,它只是按位置。

例如:

號碼(以字節)轉換爲BitArray會出來,如:

2 = 01000000 
5 = 10100000 
8 = 00010000 

它只是存儲的值的不相對的位置,但你會從二進制數值除外。

這裏是描述正在使用的構造的鏈接:

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

的關鍵點是:

在第一值數組元素的數字表示位0至 31,數組中的第二個數字代表位32到63,以及 等。 每個整數的最低有效位代表最低 索引值: 「值[0] & 1」 表示第0位, 「值[0] & 2」 表示位1 「值[0] & 4」 表示位2,等等。