프로그래밍 비트연산 설명해주세요
비트연산, 전처리기에서 다음을 설명하시오.
#define BIT1( REGISTER, BIT ) ( (REGISTER) |= (1<<BIT) )
#define BIT0( REGISTER, BIT ) ( (REGISTER) &= ~(1<<BIT) )
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으로 만드는 효과가 있습니다.