Search

비트 연산과 비트 이동 연산자

언어
C
태그
비트 연산

비트 연산자

비트

바이트 단위보다 더 작은 단위이다.
2 진수를 저장한다.
컴퓨터에서 사용할 수 있는 최소 단위이며, 0 과 1 을 나타낸다.

비트 연산자

비트를 연산할 때 쓰인다.
비트 연산은 정수나 정수로 변환 가능한 타입만 가능하다.
실수나 포인터 등은 비트 연산을 할 수 없다.
적절한 때 사용하면 메모리 공간의 효율성을 높이고, 연산의 수를 줄일 수 있다.
일반적인 사칙 연산보다 속도가 빠르다.

종류

연산자
기능
&
AND 연산
|
OR 연산
^
XOR 연산
-
모든 비트 반전. NOT 연산
<<
지정한 수만큼 비트 열을 왼쪽으로 이동
>>
지정한 수만큼 비트 열을 오른쪽으로 이동

& 연산자

논리연산의 && 와 헷갈릴수 있다.
&& 은 true 와 false 를 반환한다.
& 은 값을 반환한다.
& 연산자는 주소값을 가리키도 한다.
이때의 & 연산자는 단항 연산자이며, 피연산자가 한개만 필요하다.
즉, &b 와 같이 한개의 변수만 필요하다.
비교하는 비트는 각 수를 2 진수로 변환한 후의 자리를 비교한다.
10 을 8 비트의 2 진수로 변환하면 0000 1010 이 된다.
6 의 경우 0000 0110 이 된다.
이 두수의 같은 자리를 비교한다.
10 & 6 은 0000 0010 의 2 가 된다.
0 0 0 0 1 0 1 0
0 0 0 0 0 1 1 0
따라서 2의 자리인 2가 답이 된다.

| 연산자

두 개의 비트 중 하나라도 1 이면 1 을 반환한다.
0 0 0 0 0 1 0 0
0 0 0 0 1 0 0 0
연산값은 4 + 8 = 12 가 된다.

^ 연산자

두개의 비트가 다르면 1 을, 같으면 0 을 반환한다.
0 0 0 0 0 1 0 0
0 0 0 0 1 0 0 0
연산값은 4 + 8 = 12 가 된다.

~ 연산자

한 값의 비트를 모두 반전시킨다.
비트가 1 이면 0 을, 0 이면 1 을 반환한다.
a = 6, b = 13
c = ~a, d = ~b ⇒ c = -7, d = -14
음수가 나오는 이유는 MSB(부호비트) 가 1 로 바뀌기 때문이다.

비트 이동 연산자

<< 연산자

<< 연산자는 지정한 횟수대로 비트의 자리를 왼쪽으로 이동 시키는 연산자이다.
unsigned char a = 4 << 1
0 0 0 0 0 1 0 0 (4) ⇒ 0 0 0 0 1 0 0 0 (8) 이 된다.
unsigned char b = 8 << 2
0 0 0 0 1 0 0 0 (8) ⇒ 0 0 1 0 0 0 0 0 (32) 가 된다.
비트가 한자리씩 왼쪽으로 이동할 때마다 정수의 값은 2 배가 된다.
즉, 2 ^ n 만큼 곱하면 된다.
비트 단위에서 직접 조작하기 때문에 일반 사칙연산보다 빠르다.
단, 자료형을 주의해야 한다.
char 형의 경우 8 비트지만, int 형의 경우 32 비트이기 때문에 왼쪽으로 비트 이동을 할 때 잘리는 크기가 다르다.
unsigned 형의 경우 끝자리까지 정상적으로 이동하지만, 부호비트가 있는 자료형의 경우 MSB 의 자리로 비트가 이동했을 때 보수연산을 하게 된다.

>> 연산자

<< 연산자는 지정한 횟수대로 비트의 자리를 오른쪽으로 이동 시키는 연산자이다.
비트가 한자리씩 왼쪽으로 이동할 때마다 정수의 값은 2 로 나눈값이 된다.
즉, 2 ^ n 만큼 나누면 된다.