2011-11-27 5 views
5

무엇을 호출해야할지 모르겠으므로 인터넷 검색이 어려워집니다.주어진 비트 수의 정수로 바이트를 설정하십시오.

저는 정수가 있습니다 (예 : 3).이 정수를 11100000으로 변환합니다. 즉, 가장 중요한 비트부터 정수 비트 세트의 값을 갖는 바이트로 변환하려고합니다.

나는이 함께 할 수있을 것 같아요 :

byte result = 0; 
for(int i = 8; i > 8 - 3; i--) 
    result += 2^i; 

아무것도하지만 표준 라이브러리는 .NET에 포함 된 빠른/더 좋은 또는, 바람직하게는 무엇입니까? 몇 가능성이 있기 때문에

+0

정수가 8보다 큰 경우 어떻게됩니까? –

+6

작은 점은 Power 연산자가 아닌 C#의 Exclusive Or입니다. –

+0

@Martin Haha 덕분에, 지금 막 깨닫기 위해 몇 초가 걸렸습니다. 프로그래밍 중에 종이에 대한 방정식을 작성하는 경우에도 때때로 잊기 쉽습니다. – Max

답변

11
int n = 3; // 0..8 
int mask = 0xFF00; 
byte result = (byte) (mask >> n); 
+0

+1, 아주 좋네요. 캐스트가 꼭 필요한가요? – Cameron

+0

n> 8은 어떨까요? –

+0

@Cameron, 그렇습니다.'mask >> n'의 결과는'int' 타입입니다. –

5

, 당신은 단지 그들을 캐시 수 :

// Each index adds another bit from the left, e.g. resultCache[3] == 11100000. 
byte[] resultCache = { 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0XF8, 0xFC, 0xFE, 0xFF }; 

당신은 대신 자동 오류의 예외를 얻을 것 실수 N 값을 얻기 위해 시도하는 경우 > 8.

+0

쉽게 간과되기 쉬운 이러한 유형의 문제 (테이블 조회)에 대해 간단하고 효과적인 접근법을 지적하고 모든 프로그래머가 자신의 BOX에 있어야하는 위안 상. (이 경우 헨크스만큼 좋은 해결책은 아닙니다.) –

+0

@JasonWilliams Thanks. 나는이 대안을 게시하기 전에 Henk의 우아한 해결책을 표결했습니다 :-). –

관련 문제