비트셋(bitset) 클래스


🖥️ 비트셋 클래스(bitset class)란?

C++ 표준 라이브러리(STL)에서 제공하는 클래스 템플릿으로, 고정 크기의 비트 집합을 효율적으로 관리할 때 사용된다.
비트 플래그 연산과 유사하지만, 더 직관적이고 안전하며 비트 연산을 쉽게 수행할 수 있도록 높은 수준의 인터페이스를 제공한다.


🖥️ 비트셋의 특징 및 장점

  1. 가독성 증가
    • 연산자 오버로딩(&,, ^, ~)을 지원하여 비트를 직접 다루는 대신, 비트의 상태를 직관적으로 확인하고 설정할 수 있다.
  2. 범위 검사 지원
    • 지정된 크기 외의 비트를 설정하려고 하면, 컴파일 또는 런타임에서 오류를 발생시킬 수 있어 안전하다.
  3. 추가 기능 제공
    • 문자열 변환, 비트 카운팅 등의 편리한 메서드를 제공한다.

🖥️ C++ 예제

#include <iostream>
#include <bitset>

using namespace std;

//비트 플래그의 인덱스 정의
const int READ    = 0; //0번째 비트
const int WRITE   = 1; //1번째 비트
const int EXECUTE = 2; //2번째 비트
const int DELETE  = 3; //3번째 비트

void checkPermissions(bitset<4> flags) {
    
    printf("[권한]\n");

    if (flags[READ])    
        printf("- Read\n");

    if (flags[WRITE])   
        printf("- Write\n");

    if (flags[EXECUTE]) 
        printf("- Execute\n");

    if (flags[DELETE])  
        printf("- Delete\n");
}

int main() {

    bitset<4> permissions; //4비트 플래그 (초기값: 0000)

    //플래그 설정
    permissions.set(READ); //읽기 권한 추가
    permissions.set(WRITE); //쓰기 권한 추가

    printf("READ와 WRITE 플래그 설정 후 상태 확인 : \n");
    checkPermissions(permissions);

    //플래그 해제
    permissions.reset(WRITE); // 쓰기 권한 제거

    printf("\nWRITE 플래그 제거 후 상태 확인 : \n");
    checkPermissions(permissions);

    //플래그 토글
    permissions.flip(EXECUTE); // 실행 권한 토글 (OFF -> ON)
    printf("\nEXECUTE 플래그 토글 후 상태 확인 : \n");
    checkPermissions(permissions);

    //비트 픒래그 출력
    /// bitset에 .to_string()이 있어서 for문으로 출력하지 않고 permissions.to_string().c_str(); 로 출력해도 결과는 같음.
    
    /// 높은 비트부터 순서대로 출력되도록
    printf("\n현재 비트 플래그 상태: ");
    for (int i = permissions.size() - 1; i >= 0; --i) 
    {
        printf("%d", permissions[i]);
    }
    printf("\n");


    return 0;
}


✔️ 실행 결과


READ와 WRITE 플래그 설정 후 상태 확인:
[권한]
- Read
- Write

WRITE 플래그 제거 후 상태 확인:
[권한]
- Read

EXECUTE 플래그 토글 후 상태 확인:
[권한]
- Read
- Execute

현재 비트 플래그 상태: 0101 //0 : READ, 2 : EXECUTE



© 2024. All rights reserved.

Powered by Hydejack v9.2.1