반응형
비트 필드 구조체 (Bit Field Struct)
• 멤버 크기를 비트 단위로 설정
• 메모리 절약하면서 하드웨어 레지스터 직접 관리
• 여러 bool 타입 관리에 유용 ex) 플래그 설정
#include <stdio.h>
// 비트 필드 구조체 정의
struct BitField {
unsigned int a : 1; // 1비트
unsigned int b : 2; // 2비트
unsigned int c : 3; // 3비트
};
void main() {
struct BitField bf = { 1, 2, 5 };
printf("a: %u\n", bf.a);
printf("b: %u\n", bf.b);
printf("c: %u\n", bf.c);
printf("크기: %d\n", sizeof(bf)); // 4 Byte (= 16bit)
}
자료형이 signed 인 경우는 음수까지 저장할 수 있으나
부호비트 처리 방식이 시스템에 따라 다를 수 있으므로
주로 unsigned 타입 사용한다.
비트 필드 구조체 필요성
int 형 멤버를 3개 갖는다면 총 12바이트 메모리 할당한다.
멤버 값이 단순히 0,1 이라면 공간은 1비트로 충분하다.
구조체 크기는 패딩 문제로 컴파일러마다 다를 수 있다.
#include <stdio.h>
// 비트 필드 구조체 정의
struct BitField {
int a;
int b;
int c;
};
void main() {
struct BitField bf = { 1, 2, 5 };
printf("크기: %d\n", sizeof(bf)); // 12 Byte
}
멤버 이름 생략하면
해당 비트는 사용하지 않는 패딩 비트가 된다.
struct bit_field
{
unsigned char a : 1;
unsigned char : 2; // Padding Bit
unsigned char b : 3;
unsigned char c : 4;
}
💡 비트 마스킹 기법과 같이 활용하면 좋다.
비트마스크 (Bitmask)
비트마스크정수의 이진수 표현(Bit)을 자료 구조로 쓰는 기법현대의 모든 CPU는 이진수를 이용해도 모든 자fy 표현내부적으로 이진수를 사용하는 컴퓨터들은 이진법 관련 연산들을 아주 빨리 할
zoosso.tistory.com
반응형
'프로그래밍 언어 > C++' 카테고리의 다른 글
[C++] noexcept (3) | 2025.03.20 |
---|---|
[C++] RAII & stack unwinding (1) | 2025.03.19 |
[C++] 오류 처리 방식 (Error Handling) (3) | 2025.03.17 |
[C++] 깊은 복사 (Deep Copy) (2) | 2025.03.16 |
[C++] 함수 객체 (function object) (2) | 2025.03.15 |
댓글