2013-10-25 2 views
2

간격 [-1024, 1016]의 숫자를 변환해야합니다. 나는 다음과 같이 11 비트로 변환한다 :C# 11 비트로 음수 int 변환

string s = Convert.ToString(value, 2); //Convert to binary in a string 

int[] bits = s.PadLeft(11, '0') // Add 0's from left 
        .Select(c => int.Parse(c.ToString())) // convert each char to int 
        .ToArray(); // Convert IEnumerable from select to Array 

이것은 부호있는 정수 [0, 1016]에서 완벽하게 작동한다. 그러나 음의 정수의 경우 32 비트 결과를 얻습니다. 음수를 11 비트 배열로 변환하는 방법을 알고 있습니까? 당신이 첫 번째 11 비트에 대해 신경 경우

+0

물어 볼 수 있습니까? 사용자에게 표시 할 수 있습니까? 때문에 * 범용 * 바이너리, 당신은 아무것도 할 필요가 없습니다 - 그것은 이미 바이너리 등입니다. –

+0

나는 압축을위한 이산 코사인 변환 (DCT) 알고리즘을 만들고있어 .BMP 이미지. 이제는 숫자가 간격 [-1024, 1016]에 있기 때문에 11 비트 만 필요합니다. 당신의 대답은 나에게 많은 도움을주었습니다 :) – Klemenko

+0

알고리즘 처리의 경우,'int []'또는'string'을 포함하는 어떤 것으로 값을 필요로하는 것은 매우 드뭅니다 (일반적으로'int'를 통해 비트 연산을 할 것입니다/'긴 마스크들) -하지만 - 그것이 당신이 필요로하는 것이라면 ... 괜찮습니다. –

답변

2

, 그럼 그냥 마스크 적용

string s = Convert.ToString(value & 2047, 2); 

이 대부분 11 비트에서의 값으로 제한합니다 -와 음수에 대한 모든 "사용되지 않는"비트 것이다 1 초.

참조 : 2047은 2 진 0000 ... 0000 0111 1111 1111, 즉 최하위 11 비트의 마스크이다.