-
[WinAPI] 비트셋 이용법프로그래밍 공부/Win API 2023. 1. 15. 14:48728x90
비트셋은 이전 글에서 한 번 언급했던 적은 있었다.
2022.11.16 - [프로그래밍 공부/Win API] - [Win API] 프레임워크 구축(4) - 프로시저 캡슐화
키매니저를 구축할 때 사용했었는데, 솔직히 당시에 비트셋에 대한 이해 자체는 없었다. 단지 STL에 속해 있고 키의 상태를 저장한다는 개념만 알고있었다.
그러나 이번에 만드는 디스가이아의 경우 턴제 기반 게임이었다. 이 때 적의 턴인지 플레이어의 턴인지를 구분하기 위해서는 수많은 bool 값을 이용해야 하며, 코드 리딩도 복잡해 진다. 이를 해결할 방법이 상태 패턴, 혹은 비트셋이었다.
bool의 경우 한 개의 변수에 1byte를 사용한다. 즉 한 번 체크에 1byte라는 말이다. 그러나 비트의 경우에는 4개가 1byte를 이룬다. 0과 1의 연산자로 이루어져 있기에 bool을 대체하기에 적합하다.
사용할 땐 #include <bitset>을 해둬야 하며, STL에 속한다.
bitset 관련 함수
bitset<개수> 이름; //bitset 선언 bit.set() //전체 비트를 1로 셋팅 bit.set(n, 1/0) // n+1번째 비트를 true또는 false로 셋팅 bit.reset() //전체 비트를 0으로 리셋 bit.size() //bitset의 크기를 구한다. bit.any() //비트셋 중 하나라도 1이면 1을 반환, 모두 0일때만 0을 반환 bit.none() //비트셋 중 모두가 0이어야 1을 반환 bit.flip() //전체 비트를 반전 bit.flip(n) //n+1번째 비트를 반전 bit.test(n) //n+1번째 비트를 검사(1인지 0인지) bit.to_string() //전체 비트를 string화 시킨다. bit.to_ulong() / bit.to_ullong() //전체 비트를 unsigned long / unsigned long long 의 값으로 바꿔준다. bit.test[4] == bit[4] //배열처럼 이용이 가능하다. bit[4] == 0 / bit[4] == 1 //이렇게도 검사할 수 있다.
그럼에도 팀작업에서는 bool에 비해 이 비트셋이 어떤 상황을 가리키고 있는지 확인하기 어려운 단점이 있었고, 이는 주석을 통한 정보전달로 인해 완화할 수 있었다.
728x90'프로그래밍 공부 > Win API' 카테고리의 다른 글
[WinAPI] 프레임워크 구축(15) - 사운드매니저 구체화 (0) 2023.01.18 [WinAPI] 프레임워크 구축(14) - FMOD를 이용한 사운드매니저 만들기 (0) 2023.01.17 [WinAPI] .wav 파일으로 BGM 추가하기 + 음량 조절하기 (0) 2023.01.15 [WinAPI] 프레임워크 구축(13) - 씬매니저 만들기 (0) 2022.12.28 [WinAPI] 프레임워크 구축(12) - 애니메이션 (0) 2022.12.26