..

Search

17) 비트 연산자

17) 비트 연산자

비트 연산자


비트 연산자(bitwise operator)

비트 연산자는 논리 연산자와 비슷하지만, 비트(bit) 단위로 논리 연산을 할 때 사용하는 연산자입니다.

또한, 비트 단위로 왼쪽이나 오른쪽으로 전체 비트를 이동하거나, 1의 보수를 만들 때도 사용됩니다.

 

비트 연산자 설명
& 대응되는 비트가 모두 1이면 1을 반환함. (비트 AND 연산)
| 대응되는 비트 중에서 하나라도 1이면 1을 반환함. (비트 OR 연산)
^ 대응되는 비트가 서로 다르면 1을 반환함. (비트 XOR 연산)
~ 비트를 1이면 0으로, 0이면 1로 반전시킴. (비트 NOT 연산, 1의 보수)
<< 지정한 수만큼 비트들을 전부 왼쪽으로 이동시킴. (left shift 연산)
>> 부호를 유지하면서 지정한 수만큼 비트를 전부 오른쪽으로 이동시킴. (right shift 연산)

 

다음 그림은 비트 AND 연산자(&)의 동작을 나타냅니다.

이처럼 비트 AND 연산자는 대응되는 두 비트가 모두 1일 때만 1을 반환하며, 다른 경우는 모두 0을 반환합니다.

비트 AND 연산

 

다음 그림은 비트 OR 연산자(|)의 동작을 나타냅니다.

이처럼 비트 OR 연산자는 대응되는 두 비트 중 하나라도 1이면 1을 반환하며, 두 비트가 모두 0일 때만 0을 반환합니다.

비트 OR 연산

 

다음 그림은 비트 XOR 연산자(^)의 동작을 나타냅니다.

이처럼 비트 XOR 연산자는 대응되는 두 비트가 서로 다르면 1을 반환하고, 서로 같으면 0을 반환합니다.

비트 XOR 연산

 

다음 그림은 비트 NOT 연산자(~)의 동작을 나타냅니다.

이처럼 비트 NOT 연산자는 해당 비트가 1이면 0을 반환하고, 0이면 1을 반환합니다.

비트 NOT 연산

 

다음 예제는 비트 NOT 연산자(~)와 시프트 연산자(<<, >>)의 예제입니다.

예제

int num1 = 15;

int num2 = 8;

 

cout << "~ 연산자에 의한 결괏값은 " << (~num1) << "입니다." << endl;

cout << "<< 연산자에 의한 결괏값은 " << (num2 << 2) << "입니다." << endl;

cout << ">> 연산자에 의한 결괏값은 " << (num2 >> 2) << "입니다.";

코딩연습 ▶

실행 결과

~  연산자에 의한 결괏값은 -16입니다.

<< 연산자에 의한 결괏값은 32입니다.

>> 연산자에 의한 결괏값은 2입니다.

 

위의 예제에서 왼쪽 시프트 연산자(<<)는 지정한 수만큼 피연산자의 모든 비트를 전부 왼쪽으로 이동시켜 줍니다.

그런데 결과를 살펴보면 한 비트씩 왼쪽으로 이동할 때마다 2배씩 증가한다는 사실을 알 수 있습니다.

 

또한, 두 번째 연산의 오른쪽 시프트 연산자(>>)는 지정한 수만큼 피연산자의 모든 비트를 전부 오른쪽으로 이동시켜 줍니다.

그런데 결과를 살펴보면 한 비트씩 오른쪽으로 이동할 때마다 2배씩 감소한다는 사실을 알 수 있습니다.


연습문제