2012-01-30 3 views
13

이 코드 :BitArray가 비트를 잘못 반환합니다.

11100000 

이 주위에 다른 방법이 없을 겁니다 :

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

나에게 다음과 같은 출력을 제공합니다? 이와 같이 :

00000111 

이러한 용어는 바이트 위치만을 나타 내기는하지만 약간 크고 큰 엔디안이 있음을 알고 있습니다. 내가 아는 한, 그들은 비트에 영향을 미치지 않습니다.

답변

9

documentation for BitArray 상태 :

배열의 첫 번째 바이트가 나타내는 비트 0-7 번째 바이트는 비트 15 내지 8, 등등을 나타낸다. "바이트 [0] & 1"비트 0은, "바이트 [0] & 2"가 나타내는 비트 1 "의 바이트 [0] & 4" 비트를 나타내는 나타내는 각 바이트의 최하위 비트 최저 인덱스 값을 나타낸다 2, 등등.

비트를 인덱싱하는 경우 규칙은 최하위 끝에서 시작하며 이진법으로 쓰여질 때 오른쪽이됩니다. 그러나 배열을 열거 할 때 인덱스 0부터 시작하기 때문에 오른쪽에서 왼쪽 방향이 아닌 왼쪽에서 오른쪽 방향으로 출력됩니다. 그래서 그것이 거꾸로 보입니다. 예를 들어

, 01,011,010 00,101,101 (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까지 iterator를 반복하는 것으로 생각됩니다. 내게 합리적인 소리 (개인적으로!), 당신이 비트를 인쇄하지 않는 한. 나는 BitArray.GetEnumerator Method을 보았다.

2

아니요 비트 배열이며 비트로 표시되는 숫자 값이 아닙니다.

비트 연산을 위해 몇 가지 메소드가 추가 된 일반 배열과 같습니다. int 배열이있는 것처럼. 당신은 역순으로 그것을 기대하지 않을 것이다, 그냥 위치에 의해 위치 걸립니다.

예 (바이트 단위)

번호처럼 나올 것 BitArray 변환 :

2 = 01000000 
5 = 10100000 
8 = 00010000 

등 이는 단지 값의 위치뿐만 아니라 상대하지 저장

이진 숫자 값을 제외하고는,

제 값 배열 요소 수가 31 비트 0을 나타냄

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

요점은 :

여기 생성자는 사용을 설명하는 링크이다 배열의 두 번째 숫자는 32 ~ 63 비트를 나타내며 등을 나타냅니다. "값 [0] & 1"비트 0 "의 값 [0] & 2"비트 1 "의 값 [0] & 4"대표 를 나타내고 : 각 정수의 최하위 비트들은 최하위 인덱스 값를 나타낸다 비트 2, 등.