본문 바로가기
프로그래밍 언어/C++

[C/C++] 비트 필드 구조체

by 까망 하르방 2025. 3. 23.
반응형

비트 필드 구조체 (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)

 

비트마스크 (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

댓글