2014-07-14 2 views
0

두 개의 매개 변수 dwWidth 및 dwX % 8을 사용하고 있습니다. dwWidth는 내 번호가 얼마나 많은 비트이고 dwX % 8은 바이트가 시작되는 곳입니다. 따라서 dwWidth = 3이고 dwX % 8 = 0이면 111X XXXX가됩니다. ((참고 : 그것은 1이 아닐 수도 있고, 단지 시범을 보여주기 위해 사용하는 것이고 5와 10101과 같을 수 있습니다. 실제로 우리가 관심을 갖는 것은 모두 마스킹입니다.)이 X에있는 것을 가려주고 싶습니다. 관광 명소. 그래서이 3과 0을 어떻게 든 00011111로 변환해야합니다. 그러나 dwWidth = 4이고 dwX % 8 = 3이면 일반적인 것일 필요가 있기 때문에 XXX1 111X를 가져야하므로 4에서 이동해야합니다. a 3을 얻으면 1110 0001이됩니다. 이것은 실제로 어렵 기 때문에 가능한 경우 알아낼 수 없습니다. 이것은 산술 일 필요가 있다는 것을 기억하십시오. 스위치를 사용하여 쉽게 할 수 있습니다. 이 긴 호흡 질문은 당신이 dwWidth 연속 비트의 마스크가 0이 최상위 비트 인 위치 dwX%8에서 시작하려는 뜻 무슨 생각을 의미하는 경우10 진수에서 2 진수로 변환하는 산술, 마스크

+2

나는이 문제에 대한 귀하의 설명을 잘 모르고 있습니다. 다이어그램이 도움이 될 수 있습니다. – Alnitak

+0

UTF-8 매트릭스 및 유니 코드 인덱스 (배열)로 작성된 컴퓨터를 활용하여 프로그래밍 언어에 따라 깔끔한 해결책을 볼 수 있습니다. : D –

+0

또한, 변수 이름에 '%'를 사용하지 말아야합니다 ... 모듈로 함수를 나타내는 대부분의 프로그래밍 언어에서 ... (기본 연산자 hahahah를 참조 할 때 특히 혼란 스럽습니다!) –

답변

0

(변수 이름에 %을두고 ...)

def makeMask(width, start): 
    out = (1 << width) - 1 # field of 1's 'width' wide 
    out = out << (8 - start - width) # shift into the correct place 
    return out 

>>> x = makeMask(3, 0) 
>>> format(x, '#010b') 
'0b00011110' 

모든 산술.

관련 문제