2012-01-30 36 views
13

Mã này:BitArray trả về các bit sai đường xung quanh?

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

Cung cấp cho tôi những kết quả sau:

11100000 

nên không nó là cách khác xung quanh? Như thế này:

00000111 

Tôi biết rằng có rất ít và lớn về cuối, mặc dù các thuật ngữ đó chỉ đề cập đến vị trí byte. Theo như tôi biết, chúng không ảnh hưởng đến bit.

Trả lời

9

Các documentation for BitArray trạng thái:

Byte đầu tiên trong mảng đại diện cho bit 0 đến 7, thứ hai byte đại diện cho bit 8 đến 15, và vân vân. Các Least đáng kể Bit của mỗi byte đại diện cho giá trị chỉ số thấp nhất: "byte [0] & 1" đại diện cho bit 0, "byte [0] & 2" đại diện cho bit 1, "byte [0] & 4" đại diện chút 2, v.v.

Khi lập chỉ mục bit, quy ước là bắt đầu ở cuối ít quan trọng nhất, là bên phải khi được viết bằng ký hiệu nhị phân. Tuy nhiên, khi liệt kê mảng, bạn bắt đầu từ chỉ mục 0, vì vậy chúng được in từ trái sang phải thay vì từ phải sang trái. Đó là lý do tại sao nó trông ngược lại.

Ví dụ, từ 01.011.010 00.101.101 (90 45) sẽ được lập chỉ mục như:

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 

Và bạn sẽ vượt qua nó để các nhà xây dựng như new byte[] { 45, 90 } kể từ khi bạn vượt qua nó kém quan trọng đầu tiên. Khi được in ra, nó sẽ hiển thị theo thứ tự chỉ mục là: 1011010001011010, ngược lại ký hiệu nhị phân gốc.

2

Tài liệu không rõ ràng về nó, nhưng tôi đoán trình lặp lặp lại từ LSB đến MSB. Âm thanh hợp lý với tôi (cá nhân!), Trừ khi bạn đang in ra các bit. Tôi đã xem BitArray.GetEnumerator Method.

2

Không có mảng bit, không phải là giá trị số được biểu thị dưới dạng bit.

Nó giống như bất kỳ mảng thông thường nào với một số phương thức được thêm vào cho các thao tác bit. Cũng giống như nếu bạn có một mảng int. Bạn sẽ không mong đợi nó được theo thứ tự ngược lại, nó chỉ mất vị trí của nó theo vị trí.

Ví dụ:

số (trong một byte) chuyển đổi sang một BitArray sẽ đi ra như:

2 = 01000000 
5 = 10100000 
8 = 00010000 

, vv

Nó chỉ lưu trữ vị trí của các giá trị nhưng không liên quan như bạn sẽ ngoại trừ một giá trị số nhị phân.

Dưới đây là một liên kết mô tả các nhà xây dựng bạn đang sử dụng:

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

Điểm mấu chốt là:

Số trong các yếu tố giá trị đầu tiên mảng đại diện cho bit 0 đến 31, số thứ hai trong mảng đại diện cho các bit từ 32 đến 63 và như vậy. Các bit ít quan trọng của mỗi số nguyên đại diện cho thấp nhất giá trị index: "giá trị [0] & 1" đại diện cho bit 0, "giá trị [0] & 2" đại diện cho bit 1, "các giá trị [0] & 4" đại diện bit 2, v.v.

Các vấn đề liên quan