-
[C Language] 13. 비트 연산자 - C 언어CSE/C Language 2015. 6. 13. 10:11
1. 비트 연산자의 종류
- 비트 연산자는 모두 여섯 가지가 있으며 아래와 같다.
~ : 1의 보수 비트 연산자
^ : XOR 비트 연산자
| : OR 비트 연산자
& : AND 비트 연산자
<<: 왼쪽 시프트 연산자
>>: 오른쪽 시프트 연산자
2. ~ 비트 연산자
'~'는 단항 연산자이기 때문에 하나의 항을 가지며 어떤 수에 '~' 연산자를 사용하면 결과는 1의 보수가 된다.
사용방법
변경 전
변경 후
~5
0000 0000 0000 0101
1111 1111 1111 1010
~1024
0000 0100 0000 0000
1111 1011 1111 1111
3. ^ 비트 연산자
'^'는 이항 연산자이며 2개의 항을 가진다. 이것은 특정한 비트에 대해 XOR(Exclusive OR)을 수행하는데, 베타적 논리합이라고도 하며 아래와 같은 결과를 낸다.
5 ^ 7 => 2
0000 0101
0000 0111
--------------
0000 0010
^ 비트 연산자는 비교 대상이 되는 두 항의 값이 다를 경우에 1을 반환하고, 같을 경우에는 0을 반환한다.
4. | 비트 연산자
'|'는 두 항의 값을 논리합(OR)하여 그 결과를 출력한다.
5 | 7 => 7
0000 0101
0000 0111
--------------
0000 0111
아래 예제를 통해 다시 살펴보자. 예제는 특정 비트를 1로 설정하는 예제이다.
1234567891011121314151617181920212223242526/** bitset.c** Created on: 2015. 5. 11.* Author: root*/#include <stdio.h>int main(void) {int bit = 8; // 0x00001000int result;result = bit | 0x00000001;/** 0x00001000* 0x00000001* ------------* 0x00001001*/printf("Result is %d\n", result);return 0;}cs 5. & 비트 연산자
'|' 비트 연산자가 특정한 위치의 비트를 1로 만들 때 유용하다면 '&' 비트 연산자는 반대로 특정한 위치의 비트를 0으로 만들 때 유용하다.
6. << 비트 연산자
사용법을 통해 알아보도록 하자. 아래와 같은 명령을 주었다고 하자.
int bitShift = 5;
bitShift = bitShift << 2;
맨 처음 변수 선언 시, 아래와 같은 영역을 할당받는다.
00000000 00000000 00000000 00000101
그 다음 비트 연산을 통해 비트가 '왼쪽으로 2칸' 이동하게 된다. 나머지 부분은 0으로 채워진다.
00000000 00000000 00000000 00010100
왼쪽으로 이동하게 되면 2의 N 제곱한 것과 같아진다. 본래 5의 값에 왼쪽으로 2회 이동했기 때문에 5 * 4를 통해 결과는 20이다.
다음은 예제를 통해 실행을 해보자.
예제는 10진수를 입력하여 2진수로 변환하는 예제이다.
12345678910111213141516171819202122232425262728/** binary.c** Created on: 2015. 5. 11.* Author: root*/#include <stdio.h>int main(void) {int i;int num;printf("Input primative number");scanf("%d", &num);for (i = 0; i < 32; i++) {if (num & 0x80000000)putchar('1');elseputchar('0');num <<= 1;}return 0;}cs 7. >> 비트 연산자
왼쪽 시프트 연산자와 사용 방법은 다르지 않지만, 주의사항이 있으므로 짚고 넘어가도록 하겠다.
오른쪽 시프트 연산자를 사용할 때 가장 조심해야 할 부분은 '부호있는 피연산자' 즉, 음수일 경우의 주의사항이다.
이 연산을 음수일 경우에 사용하면, 왼쪽에 채워지는 비트는 0이 아니라 1다.
아래 예를 통해 보도록 하자.
5 >> 2 0000 0101 >> 2 ==> 0000 0010
-5 >> 2 1111 1011 >> 2 ==> 1111 1110
* Programming in C 서적을 참고하여 작성하였습니다
'CSE > C Language' 카테고리의 다른 글
[C Language] 16. switch 문 - C 언어 (0) 2015.06.13 [C Language] 15. if ~ else - C 언어 (0) 2015.06.13 [C Language] 14. 캐스트 연산자 - C 언어 (0) 2015.06.13 [C Language] 12. 조건 연산자 - C 언어 (0) 2015.06.13 [C Language] 11. 논리 연산자 - C 언어 (0) 2015.06.13 [C Language] 10. 관계 연산자와 상등 연산자 - C 언어 (0) 2015.06.13