1. 비트 OR 연산자 (|)

 a의 비트
 b의 비트
 a의 비트 | b의 비트
 0 0
0
 0 1
1
 1 0
1
 1 1
1
각 비트에 대해서 OR 연산을 수행한다.

0
 0 0
 0  1  0 1
0
 | |
|
|
 | |
|
|
 0 0
0
 0 1
1
0
0
 =  =  = =
 = =
 = =
 0  0 0
 0  1 1
 1 0
위와 같이 각 비트들을 모두 OR 연산 한다.

2. 비트 XOR 연산자 (^)
a의 비트
b의 비트
a의 비트 ^ b의 비트
 0 0
0
 0 1
1
 1 0
1
 1 1
0
XOR은 배타적 논리합(exclusive OR)이라고도 하고, 두 값이 다르면 1, 같으면 0이 되는 연산이다.

3. 비트 NOT 연산자 (~)
 a의 비트
~a의 비트
 0  1
 1  0
단항 연산자로 피연산자가 하나뿐이고 각 비트를 반전시킨다. 즉, 0은 1로, 1은 0으로 만든다.

4. 비트 이동 연산자 (<<, >>)

0

 0

 1

 0

 1

 0

1

 0

 1

 0

 0

 0

  위의 첫번째 표는 10을 2진수로 나타낸 것이다. 아래의 두번째 표는 10<<2로 10을 왼쪽으로 2비트씩 이동시킨 것이다.
파란색 부분은 빈자리에 대신 들어온 비트이다. 이때 빈자리에는 0이 채워진다. 비트 이동 연산자의 우변이 n이라고 하면, 비트 왼쪽 이동은 2^n을 곱하는 것과 결과가 같다.반대로 오른쪽 이동은 2^n을 나누는 것이 된다.

 #include <stdio.h>
 int main(void)
{ 
 int a=10; //0x0a
 int b; 
 b = a <<2;
 printf("a <<2 = %08x(%d)\n",b,b);
 b = a >>2;
 
 printf("a >>2 = %08x(%d)\n",b,b);
 
 return 0;
}

 비트 이동 연산자를 이용한 위의 코드로 확인이 가능하다.


'프로그래밍 > C' 카테고리의 다른 글

배열과 포인터의 관계  (0) 2010.10.09
포인터 (Pointer)  (0) 2010.10.09
선택정렬 (Selection Sort)  (0) 2010.10.09
배열 (array)  (0) 2010.10.09
삼각형 출력하기  (0) 2010.10.03
형변환 (type conversion)  (0) 2010.10.03
삼항 연산자를 이용한 최대값 구하기  (0) 2010.10.03

+ Recent posts