아하
검색 이미지
생활꿀팁 이미지
생활꿀팁생활
생활꿀팁 이미지
생활꿀팁생활
강직한테리어212
강직한테리어21221.04.22

프로그래밍 비트연산 설명해주세요

비트연산, 전처리기에서 다음을 설명하시오.

#define BIT1( REGISTER, BIT ) ( (REGISTER) |= (1<<BIT) )

#define BIT0( REGISTER, BIT ) ( (REGISTER) &= ~(1<<BIT) )

55글자 더 채워주세요.
답변의 개수
1개의 답변이 있어요!
  • int a = 0; 이라고 하면 int 는 32bit이기 때문에 메모리에 아래처럼 보입니다.

    00000000 00000000 00000000 00000000 (8 bit 4개)

    1 << BIT 라는 것은 00000000 00000000 00000000 00000001 을 BIT만큼 앞으로 보내는 것이 됩니다.

    따라서 1 << 3은 00000000 00000000 00000000 00001000 (1이 3칸 앞으로 이동)이 됩니다.

    (REGISTER) |= (1<<BIT) -> REGISTER = REGISTER | (1 << BIT) 가 되므로,

    REGISTER의 N번째 BIT를 1로 만드는 효과가 있습니다.

    따라서 a |= (1 << 3)은 00000000 00000000 00000000 00001000

    여기서 한번 더 a |= (1<<5) 를 하면 00000000 00000000 00000000 00101000 이 됩니다.

    (1<<3)에 ~(1<<3)을 하면 0은 1로 1은 0으로 변경됩니다.

    00000000 00000000 00000000 00001000

    -> 11111111 11111111 11111111 11110111

    그러면 a &= ~(1<<3)은 3번째 비트를 끄는 연산이 됩니다.

    a가 현재

    00000000 00000000 00000000 00101000 이므로

    11111111 11111111 11111111 11110111 를 & 연산 하면 0 & 1 = 0 이 되고 1 & 1 은 1이 됩니다.

    00000000 00000000 00000000 00100000

    따라서 3번째 비트를 0으로 만드는 효과가 있습니다.