CHAR_BIT는 char 타입 하나가 몇 개의 비트로 구성되어 있는지를 나타내는 상수입니다. C++에서는 <limits.h> 헤더 파일에 선언되어 있으며, 일반적으로 1바이트는 8비트이므로 CHAR_BIT의 값은 8입니다.
CHAR_BIT의 주요 특징
- 정의: char 타입이 가지는 비트 수를 정수 상수 형태로 제공합니다.
- 선언 위치: C 언어의
limits.h헤더에 선언되어 있으며, C++에서는<climits>헤더를 통해서도 사용할 수 있습니다. - 일반적인 값: 대부분의 현대 시스템에서 8이지만, 표준은 최소 8비트만을 보장하므로 플랫폼에 따라 달라질 수 있습니다.
- 활용: sizeof 연산자와 곱하면 해당 타입의 전체 비트 수를 계산할 수 있어, 비트 조작이나 메모리 구조 분석에 매우 유용합니다.
예제 코드
다음은 C++에서 CHAR_BIT를 활용해 정수 28을 이진수로 출력하는 예제입니다.
#include <bits/stdc++.h>
using namespace std;
int main() {
int x = 28;
int a = CHAR_BIT*sizeof(x);
stack<bool> s;
cout << "The number is : " << x << endl;
for (int i=1; i<=a; i++) {
s.push(x%2);
x = x/2;
}
cout << "The number of bits in a byte : " << CHAR_BIT << endl;
for (int i=1; i<=a; i++) {
cout << s.top();
s.pop();
if (i % CHAR_BIT == 0)
cout << " ";
}
return 0;
}
코드 동작 원리
CHAR_BIT * sizeof(x)를 계산하여 int 타입 변수 x의 총 비트 수(8 × 4 = 32비트)를 구합니다.- x를 2로 나눈 나머지를 스택에 차례로 push하고, x를 2로 나누어 자릿수를 하나씩 줄여갑니다.
- 스택은 LIFO(후입선출) 구조이므로 pop 할 때 낮은 자리 비트부터 역순으로 꺼내져 올바른 이진수 순서로 출력됩니다.
- 8비트마다 공백을 한 칸씩 출력하여 결과의 가독성을 높입니다.
실행 결과
The number is : 28
The number of bits in a byte : 8
00000000 00000000 00000000 00011100
실행 결과에서 확인할 수 있듯이, 정수 28은 4바이트(32비트) int 타입으로 표현되며 이진수로는 00011100입니다. 앞의 24비트는 모두 0으로 채워져 있는 것을 볼 수 있습니다. 이처럼 CHAR_BIT를 활용하면 시스템의 바이트 크기에 종속되지 않고 이식성 있는 비트 단위 코드를 작성할 수 있습니다.