비트 연산자
비트 연산자(bitwise operator)
비트 연산자는 비트(bit) 단위로 논리 연산을 할 때 사용하는 연산자입니다.
또한, 비트 단위로 전체 비트를 왼쪽이나 오른쪽으로 이동시킬 때도 사용합니다.
비트 연산자 | 설명 |
---|---|
& | 대응되는 비트가 모두 1이면 1을 반환함. (비트 AND 연산) |
| | 대응되는 비트 중에서 하나라도 1이면 1을 반환함. (비트 OR 연산) |
^ | 대응되는 비트가 서로 다르면 1을 반환함. (비트 XOR 연산) |
~ | 비트를 1이면 0으로, 0이면 1로 반전시킴. (비트 NOT 연산) |
<< | 지정한 수만큼 비트들을 전부 왼쪽으로 이동시킴. (left shift 연산) |
>> | 부호를 유지하면서 지정한 수만큼 비트를 전부 오른쪽으로 이동시킴. (right shift 연산) |
다음 그림은 비트 AND 연산자(&)의 동작을 나타냅니다.
이처럼 비트 AND 연산자는 대응되는 두 비트가 모두 1일 때만 1을 반환하며, 다른 경우는 모두 0을 반환합니다.
다음 그림은 비트 OR 연산자(|)의 동작을 나타냅니다.
이처럼 비트 OR 연산자는 대응되는 두 비트 중 하나라도 1이면 1을 반환하며, 두 비트가 모두 0일 때만 0을 반환합니다.
다음 그림은 비트 XOR 연산자(^)의 동작을 나타냅니다.
이처럼 비트 XOR 연산자는 대응되는 두 비트가 서로 다르면 1을 반환하고, 서로 같으면 0을 반환합니다.
다음 그림은 비트 NOT 연산자(~)의 동작을 나타냅니다.
이처럼 비트 NOT 연산자는 해당 비트가 1이면 0을 반환하고, 0이면 1을 반환합니다.
다음 예제는 비트 NOT 연산자(~)와 시프트 연산자(<<, >>)의 예제입니다.
예제
int num01 = 15; int num02 = 8;
printf(" ~ 연산자에 의한 결괏값은 %d입니다.\n", ~num01); // 1의 보수
printf("<< 연산자에 의한 결괏값은 %d입니다.\n", num02 << 1); // 곱하기 2
printf(">> 연산자에 의한 결괏값은 %d입니다.\n", num02 >> 1); // 나누기 2
실행 결과
~ 연산자에 의한 결괏값은 -16입니다.
<< 연산자에 의한 결괏값은 16입니다.
>> 연산자에 의한 결괏값은 4입니다.
비트 연산자에 대한 더 자세한 사항은 C언어 비트 단위 연산 수업에서 확인할 수 있습니다.