비트 연산자
비트
•
바이트 단위보다 더 작은 단위이다.
•
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 로 바뀌기 때문이다.
◦
MBS 가 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 만큼 나누면 된다.