비트 플래그
비트 플래그는 저장공간을 좀 더 효율적으로 사용하기 위해서 사용한다.
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 |