아하
검색 이미지
생활꿀팁 이미지
생활꿀팁생활
생활꿀팁 이미지
생활꿀팁생활
느긋한쇠오리233
느긋한쇠오리23319.06.12

C 비트 연산 관련 질문입니다.

안녕하세요.

비트 연산자와 배열 원소에 대해서 궁금한 부분이 있습니다.

#include <stdio.h>
int main() {
int decimal = 0;
int binary[4] = { 1,1,0,1 };
int pos= 0;
int i;
for (i = sizeof(binary) / sizeof(int) - 1; i >= 0; i--) {
if (binary[i] == 1)
decimal += 1 << pos;
pos++;
}
printf("%d\n", decimal);
return 0;
}

main()의 for loop에서

decimal += 1 << pos;

이 부분이 이해가 잘 가지 않습니다. 어떤 동작을 하는 걸까요??

55글자 더 채워주세요.
답변의 개수
1개의 답변이 있어요!
  • decimal += 1 << pos; decimal += (1 << pos);

    << 연산자가 += 연산자보다 우선입니다.

    1을 8비트, 이진수로 나타내면 0000001이 되는데,
    왼쪽으로 pos칸씩 밀면서 pos를 1씩 증가시키니까
    1 << pos가 00000010, 00000100 ...처럼 될 것입니다.

    배열의 각 원소가 이진수로 각 자리의 비트를 나타낼 때
    원래의 수에서 비트 순서를 반전한 것을 구하는 코드인 것 같네요