C에서 몇 가지 비트 연산 연습을 본 적이 있는데 이해할 수 없는 것이 하나 있습니다. 특정 정수 "x"에서 n번째 바이트와 m번째 바이트를 교환하려면 비트 연산을 사용해야 하며 n과 m은 다음과 같습니다. 둘 다 <=3. 해결책은 x >> (n<<3) 에서 x >> (m<<3) 의 XOR을 기반으로 결과 숫자의 마지막 8비트를 마스킹하는 것입니다. 그러나 내가 이해하지 못하는 것은 m/ n 오른쪽으로 3비트 .
답변1
n
if는 한마디로 위치이기 때문에바이트 단위, 그렇다면 8*n
같은 위치입니다비트 단위로. (2 3n<<3
= 8)과 같습니다.8*n
를 사용하면 n=1
두 번째로 낮은 바이트가 맨 아래 위치로 이동 하고 나머지 단어가 마스크됩니다. (물론 바이트는 0부터 시작하여 번호가 매겨집니다.)n<<3
8
(x >> (n << 3)) & 0xff
(저는 바이트가 8비트라고 가정합니다. 왜냐하면 적어도 지금은 이것이 가장 일반적인 경우라고 생각하기 때문입니다.)