비트 플래그

 

비트 플래그는 저장공간을 좀 더 효율적으로 사용하기 위해서 사용한다.

1바이트는 비트가 8개인데 비트 플래그는 8가지 '상태'를 저장해서 사용할 수 있다.

하지만 bool타입은 8비트 중 1비트만 사용하고 나머지 7비트를 낭비함으로써

1가지 상태를 저장하기 때문에 비효율적이다. 이것이 특정 상황에서 bool 타입 대신 

비트 플래그를 사용하는 이유이다.

 

예를 들어

0b0000 [무적][공포][기절][탈진] 

이런 식으로 각 비트마다 사용자가 특별한 의미를 부여하고 해당 비트가

활성화되어있느냐를 따져서 부여한 의미가 발동하거나 발동하지 않게 할 수 있는 것이다.

 

0b0001 이 경우 마지막 비트가 활성화되어 있기 때문에 탈진 상태가 되는 것이다.

0b0011 이 경우 첫 번째와 두 번째 비트가 활성화되어 있기 때문에 기절과 탈진 상태가 되는 것이다.

 

무적 상태로 만드는 경우

flag = (1 << 3); 

 

무적+공포 상태로 만드는 경우

flag |=(1 << 2);  // | 비트 or 연산

 

이때 특정 자리의 비트가 활성화되어있는지 확인하고 싶다면?

bitmask를 활용할 수 있다.

지금 flag의 상태가 무적 상태인지 궁금하고 다른 상태는 관심이 없다고 가정해보겠다.

 

bool a =((flag & (1 << 3)) != 0)

이것을 비트단위로 자세히 보면

0b1100 (flag)

0b1000 (1 << 3)

이 둘을 and 연산해서 나온 값이 0과 다르다면 참

0과 같다면 거짓 상태를 bool 타입 변수 a에 저장한다.

 

이것을 통해 특정 상태가 활성화되어 있는지 확인할 수 있고 이 방법의 장점 중 하나는

확인하고 싶은 상태만을 1로 만들어서 and 연산하기 때문에 다른 자리의 상태들은

모두 0으로 처리된다는 것이다.

 

 

'프로그래밍 언어 공부 > C++' 카테고리의 다른 글

열거형  (0) 2022.05.26
분기문, 반복문을 활용해 코딩 연습하기  (0) 2022.05.25
const와 메모리 구조  (0) 2022.05.23
불리언, 부동소수점, 문자, 문자열  (0) 2022.05.20
환경설정, 정수  (0) 2022.05.19

+ Recent posts