본문 바로가기
Basic/C/C++

[C언어] 제 12 강 : 비트연산자

by boxbop 2012. 1. 16.
반응형

 비트 연산자는 비트단위로 연산을 진행하는 연산자입니다. 오직 정수범위에서만 해당되며 실수에 대해서는 비트 연산이 불가능합니다. 비트 연산자는 대부분이 이항 연산자입니다.

-비트연산자
& : 비트단위로 AND 연산을 한다.
| : 비트단위로 OR 연산을 한다.
^ : 비트단위로 XOR 연산을 한다.
~: 단항 연산자이며 피연산자의 모든 비트를 반전시킨다.

-비트 쉬프트 연산자
<< : 피연산자의 비트 열을 왼쪽으로 이동시킨다.
>> : 피연산자의 비트 열을 오른쪽으로 이동시킨다.

 예를 들어보겠습니다. n1과 n2라는 두 개의 피연산자가 있습니다.
n1은 0101, n2는 1100 일때 n1 & n2는 각각의 비트를 AND연산하게 됩니다.
                     
           0101
                       1100 & (AND연산 진행)
                    =  0100 이 되겠죠~? 

 이번에는 ~n1 연산을 해봅시다. 피연산자의 모든 비트를 반전시키므로 0101에서 1010으로 변환이 됩니다. 비트 쉬프트 연산은 비트열을 지정한 크기만큼 이동시킵니다.

 00000000000000000000001  이라는 비트를 m이라고 한다면
 00000000000000000000010  이것은 m<<1 되고
 00000000000000000000100  이것은 m<<2 가 되겠죠~?

비트가 이동되고 새로운 공간은 0으로 채워집니다. 반대로 밀려나는 비트는 그냥 버려지게 되죠~ 사실 비트연산자는 보통 중요하지 않다고 생각하시는 분들이 많습니다. 실직적인 프로그래밍에 비교적 자주 사용되지 않기 때문이죠. 그러나 좀 더 응용하면 아주 유용하게 사용됩니다. 앞으로도 접할 소지가 많은 '비트 마스크' 라는 것인데요, 간단하게 설명하고 마치도록 하겠습니다.

 비트 마스크는 비트의 열에 씌울 수 있는 마스크라고 정의할 수 있습니다.
그럼 비트 마스크를 어떠한 경우에 사용할까요? 주로 비트의 특정 부분을 추출할 때 사용합니다.

 1010 1111 0010 1101 0111 -> n1
 0000 0000 0000 0000 1111 -> 비트마스크

 n1이라는 비트열과 비트마스크를 AND연산하면 어떻게 될까요?
0000 0000 0000 0000 0111 이라는 비트열이 나오겠죠? 이 값은 n1 비트열의 마지막 4개의 비트를 의미합니다. 감이 오시나요? 비트마스크를 사용하면 특정 비트를 추출할 수 도 있고, 비트 열의 일부를 변경시킬 수 도 있습니다.

 오늘은 여기까지 하도록 하겠습니다~~~ 감사합니다(--)(__)(--)
반응형