비트 연산(Bitwise operation)은 한 개 혹은 두 개의 이진수에 대해 비트 단위로 적용되는 연산이다.
* int 는 부호가 있는 정수라는 점을 잊지 말자.
● AND 연산자 : &
a & b : a, b 둘 다 '참' 일 때 1을 반환
예) 0 & 0 => 0
0 & 1 => 0
1 & 1 => 1
소스)
int main() { int a = 4; //0000 0100 int b = 20; //0001 0100 int c = a & b; //0000 0100 printf("a & b = %d \n", c); // 4 return 0; }
● OR 연산자 : |
a | b : a, b 중 하나라도 '참' 일 때 1을 반환
예) 0 | 0 => 0
0 | 1 => 1
1 | 1 => 1
소스)
int main() { int a = 4; //0000 0100 int b = 20; //0001 0100 int c = a | b; //0001 0100 printf("a | b = %d \n", c); // 20 return 0; }
● XOR 연산자 : ^
a ^ b : a, b 두 값이 서로 다를 때 1을 반환
예) 0 ^ 0 => 0
0 ^ 1 => 1
1 ^ 1 => 0
소스)
int main() { int a = 4; //0000 0100 int b = 20; //0001 0100 int c = a ^ b ; //0001 0000 printf("a ^ b = %d \n", c); // 16 return 0; }
● NOT 연산자 : ~
~a : 값을 반대로 나타낸다.
예) ~0 => 1
~1 => 0
소스)
int main() { int a = 4; //0000 0100 int c = ~a ; //1111 1011 -> 부호있는 2의 보수의 형식이다. printf("~a = %d \n", c); // -5 return 0; }
● 왼쪽 쉬프트 연산자 : <<
a << b : a의 비트들을 b칸씩 왼쪽으로 이동, a*2b의 값이 된다.
예) 18의 2인수 0001 0010 의 비트들을 왼쪽으로 두 칸씩 이동 : 0100 1000 -> 72
소스)
int main() { int a = 18; int c = a << 2; // 72 -> 18*4 printf("%d << %d = %d \n", a, 2, c); return 0; }
● 오른쪽 쉬프트 연산자 : >>
a >> b : a의 비트들을 b칸씩 왼쪽으로 이동, a/2b의 값이 된다.
예) 72의 2진수 0100 1000 의 비트들을 오른쪽으로 2칸 이동 : 0001 0010 -> 18
소스)
int main() { int a = 72; int c = a >> 2; // 18 -> 72/4 printf("%d >> %d = %d \n", a, 2, c); return 0; }
'C/C++기초' 카테고리의 다른 글
파스칼의 삼각형 - C++에서 파스칼 삼각형을 만들어보자 (0) | 2010.11.16 |
---|---|
5x5 달팽이 모양 사각형 만들기 (0) | 2010.10.25 |
하노이의 탑 (0) | 2010.09.28 |
삽입정렬(Insertion sort) - 삽입정렬을 구현해보자 (0) | 2010.09.18 |
버블정렬(거품정렬 : Bubble sort) - C++로 버블정렬 하는 방법을 알아보자. (2) | 2010.09.11 |