Chapter 05에서 연산자에 대해 알아보았는데 오늘은 거기서 다루지 못한 연산자 중 '비트 연산자'에 대해 알아보겠습니다.
비트 연산은 주로 하드웨어 프로그래밍에 활용되지만 그 외 영역에서도 사용됩니다.
메모리 사용 효율성이 높고, 연산의 수도 줄일 수 있다는 장점이 있습니다. 비트 연산의 활용에 대한 얘기는 여기까지 하고 기능에 대해 살펴보겠습니다.
& 비트단위로 AND 연산
num1 & num2;
| 비트단위로 OR 연산
num1 | num2;
^ 비트단위로 XOR 연산
num1 ^ num2;
~ (단항 연산자) 피연산자의 모든 비트 반전
~num;
<< 피연산자 비트 열을 왼쪽으로 이동
num<<2; //num은 변화 없음, 두 칸 왼쪽 이동 결과만 반환
>> 피연산자 비트 열을 오른쪽으로 이동
num>>2; //num은 변화 없음, 두 칸 오른쪽 이동 결과만 반환
이제 이 연산자들을 하나 씩 설명 해 보겠습니다.
& (AND) 연산자
& 연산자는 두 개의 비트가 모두 1일 때 1을 반환하는 연산자입니다. 연산 결과는 다음과 같습니다.
0 & 0 0 반환
0 & 1 0 반환
1 & 0 0 반환
1 & 1 1 반환
예제 한 번 봅시다.
실행 결과
연산 과정을 그림으로 볼까요?
이해가 되시나요?
4바이트 정수를 2진수(비트)로 바꿔서 그 속에서 &연산을 하는 겁니다.
그래서 연산 결과로 17이 나온거지요.
| (OR) 연산자
| 연산자는 두 개의 비트 중 하나라도 1이면 1을 반환하는 연산자입니다. 연산 결과는 다음과 같습니다.
0 | 0 0을 반환
0 | 1 1을 반환
1 | 0 1을 반환
1 | 1 1을 반환
예제 보시죠
실행 결과
연산 과정 보겠습니다.
연산 결과로 27이 출력되었습니다.
^ (XOR) 연산자
^ 연산자는 두 개의 비트가 서로 다른 경우에 1을 반환하는 연산자입니다. 연산 결과는 다음과 같습니다.
0 ^ 0 0을 반환
0 ^ 1 1을 반환
1 ^ 0 1을 반환
1 ^ 1 0을 반환
예제 봅시다
실행 결과
과정 보겠습니다.
10이 출력되었습니다.
~ (NOT) 연산자
~ 연산자는 비트를 0에서 1로, 1에서 0으로 반전시키는 연산자입니다. 보수연산이라고도 불립니다.
연산 결과는 다음과 같습니다.
~0 1을 반환
~1 0을 반환
예제 보겠습니다.
실행결과
11111111 11111111 11111111 11101100
MSB까지 바뀌어 -20이 출력되었습니다.
<< (Shift) 연산자
<< 연산자는 첫 번째 피연산자에서 두 번째 피연산자 만큼 비트를 왼쪽으로 이동시키는 연산자입니다.
여기서 피연산자는 num1 << num2 에서 num1, num2를 의미합니다.
사용방법과 기능은 다음과 같습니다.
num1 << num2 num1의 비트 열을 num2칸씩 왼쪽으로 이동시킨 값 반환
4 << 2 정수 8의 비트 열을 2칸씩 왼쪽으로 이동시킨 값 반환
예제 봅시다.
실행 결과
연산 과정을 살펴봅시다.
00000000 00000000 00000000 00010011 여기서 왼쪽으로 1칸 이동시키면
00000000 00000000 00000000 00100110 이렇게 됩니다.
2칸 이동시키면
00000000 00000000 00000000 01001100
3칸 이동시키면
00000000 00000000 00000000 10011000
>> (Shift) 연산자
>> 연산자는 << 연산자와 반대로 오른쪽으로 비트 열을 이동시킵니다.
양수일 경우 오른쪽으로 이동하면서 밀려나는 오른쪽 비트는 소멸되고 이동으로 인해 생긴 왼쪽 비트의 빈 자리는 0으로 채워집니다.
하지만 음수를 이동시킨다면 CPU에 따라 MSB가 바뀔 수도 있습니다.
11111111 11111111 11111111 11110000 // -16
여기서 오른쪽으로 2칸식 이동시킨다면
00111111 11111111 11111111 11111100
이렇게 0이 채워지거나
11111111 11111111 11111111 11111100
이렇게 1이 채워지거나 합니다.
우리가 쓰는 CPU는 어떻게 연산하는지 예제를 통해서 알아봅시다.
실행 결과
저같은 경우는 MSB부호는 그대로 1이 채워지나 봅니다.
이번 강의는 여기서 마치겠습니다.
다음 강의는 여러가지 자료형에 대해 다룹니다.
다음 강의 때 뵙겠습니다.
'C언어 강의' 카테고리의 다른 글
(C언어 강의) Chapter -10 상수와 형 변환 -01 (0) | 2016.07.24 |
---|---|
(C언어 강의) Chapter -09 여러가지 자료형 (3) | 2016.07.08 |
(C언어 강의) Chapter -07 컴퓨터의 데이터 표현방식 (0) | 2016.07.04 |
(C언어 강의) Chapter -06 데이터입력과 C언어 키워드 (0) | 2016.07.03 |
(C언어 강의) Chapter -05 변수와 연산자 - 2 (0) | 2016.07.02 |