개발일기

[C언어 활용] 비트 연산자 이해하기 본문

프로그래밍 이론/C

[C언어 활용] 비트 연산자 이해하기

한민기 2021. 8. 1. 23:29
반응형

<예제 코드>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
 
int main()
{
    unsigned char ch = 255, mask = 0x7F;
 
    printf("%d\n", ch);
    printf("%d\n", ch & mask);
    printf("%d\n", (char) ~ch);
    printf("%d\n", ch ^ ch);
    printf("%d\n", ch >> 1);
    printf("%d\n", mask << 1);
 
    return 0;
}
cs

비트 연산은 약간 특별한 경우에 사용하기 때문에 C 언어에 대해 좀 더 실력이 붙은 다음에 봐도 늦지 않습니다.

비트 연산은 2진수를 연산하기 위한 것으로써, 비트 연산자를 이해하기 위해서는 우선 2진수라는 것이 무엇인지 알아야 합니다. 보통 우리들이 사용하는 0~9까지의 수를 10진수라고 부릅니다.

10개의 숫자를 사용하기 때문에 10진수라고 부르면 2진수는 2개의 숫자(0, 1)를 사용합니다.

십진수 3을 2진수로 변경해서 표현하면 11이 됩니다.

십진수는 한자리 늘어 날때마다 1, 10, 100, 1000, ... 그럼 2진수는 어떻게 늘어날까요?

1, 2, 4, 8, ... 이런 식으로 2의 승수로 늘어납니다.

C언어 프로그래밍에서는 특별히 16진수를 표현할 때 0x를 사용합니다.

예제에서 0x7F는 16진수를 표현하는 것입니다.

그럼 지금부터 위 예제 소스에 대해서 설명해드리겠습니다.

5번째 줄 : 문자형 변수 ch에 255를 대입합니다. 이 값을 2진수로 표현하자면 11111111이 됩니다.

7번째 줄 : ch의 값을 출력합니다.

8번째 줄 : ch & mask의 값은 논리곱으로써, 다음과 같이 연산합니다.

비트곱 연산은 두 개의 값이 모두 1인 경우 1이 되며, 두 개 중 하나라도 0이면 그 값은 0이 됩니다.

1 1 1 1 1 1 1 1 ← ch의 변수 2진 표현 값

&0 1 1 1 1 1 1 1 ← mask 변수의 2진 표현 값

--------------------------------------------

0 1 1 1 1 1 1 1 ← 10진수로 127

9번째 줄 : ~ch의 값은 모든 비트의 값을 반전하는 역할을 합니다.

10번째 줄 : ch ^ ch 의 값은 배타적 비트합의 값으로써, 둘 중의 하나만 참인 경우에만 참이 됩니다.

11번째 줄 : ch >> 1 의 값은 모든 비트를 한 자리씩 오른쪽으로 옮기는 역할을 합니다. 컴퓨터는 내부적으로 덧셈과 뺄셈만을 할 수 있기 때문에 나눗셈은 바로 이 연산자를 사용하여 구현합니다.

쉬프트 연산자 ( >> ) 는 모든 비트를 오른쪽으로 한 자리씩 옮기는 역할을 합니다.

쉬프트 연산자 ( << ) 는 모든 비트를 왼쪽으로 한 자리씩 옮기는 역할을 하며 곱셈은 바로 이 연산자를 사용하여 구현합니다.

반응형
Comments