유니티 - 비트 플래그
제작을 하다보면 여러가지 변수가 필요해진다.
비트 플래그를 어떻게 쓰는지는 익힌 적이 있었지만 굳이? 그렇게 복잡하게? 그냥 변수 n개 만들면 되는 걸... 같은
안일한 생각으로 실사용하지 않았었다.
하지만 이번에 총 12개의 껐다 켰다 할 수 있는 토글을 만들어야하게 되었는데
비트 플래그로 만들면 된다는 조언을 바탕으로 사용해보게 되었다.
- 비트 플래그
- 값 지정하기
- x1 = 1
- x2 = 2
- x3 = 4
- x4 = 8
- 이런식으로 2의 배수로 정해주면 3 → x1, x2 / 5 → x1, x3 / 6 → x2, x3 / 7 → x1, x2, x3 / 8 → x4
- 즉, 모든 경우의 수가 1부터 순차적으로 저장됨
- 값 다루기
- 특정 위치 비트 상태값 바꾸기
- Value ^= Option1 → 옵션 1번만 토글하기
- 00, 11의 경우 0 / 01, 10의 경우 1. 옵션의 자릿수를 제외하고 전부 0이므로 1은 1로, 0은 0으로 유지된다. Value의 옵션값이 1일 경우 같은 1이므로 0으로 변경, 0일 경우 1이 들어오므로 1로 변경.
- Value &= ~Option1 → 옵션 1번 끄기
- 옵션1을 반전시켜서 111011 로 만들고 Value와 AND 연산하면 옵션1의 자릿수만 0으로 고정, 나머지는 각각 1과 0이 유지된다.
- Value & Option1 → 옵션 1번의 bool값을 가져옴
- 참의 경우, 000100 / 거짓의 경우, 000000 으로 나오므로
bool값으로 if안에 그냥 넣어도 작동함(아니었다 작동안함 이거!!!!!!!!! → 나온 값을 옵션1과 같은지 확인하여 bool값을 얻으면 해결)
- 참의 경우, 000100 / 거짓의 경우, 000000 으로 나오므로
- 값 확인하기
- 비교하고자 하는 상태값 ( 101101 ) 과 원하는 값 ( 000100 ) 과 AND 연산
- = ( 000100 ) 이 나오면 참, ( 000000 ) 이 나오면 거짓
- 값 지정하기
C++ 03.08 - 비트 플래그와 비트 마스크 (Bit flags and bit masks)
03.08 - 비트 플래그와 비트 마스크 (Bit flags and bit masks) 비트 플래그 (bit flag) 메모리의 최소 크기 단위는 1바이트이므로 변수의 크기는 적어도 1바이트 이상이다. 8비트(1바이트)는 비트가 8개이므
boycoding.tistory.com
여기까지 내가 직접 사용하며 정리해본 내용이다.
결국 비트 플래그는 스위치를 가로로 길게 나열한 모습이고 그게 2진수와 동일하게 작동해서 표현 가능한 것이다.
예를 들어 4개의 스위치가 있다고 생각해보자.
0000 -> 이 형태는 모든 스위치가 꺼진 모습이다.
1111 -> 이 형태는 모든 스위치가 켜진 모습이다.
이 스위치들의 경우의 수는 총 몇개일까?
4개의 스위치가 2가지의 경우를 각각 가지고 있으므로 2*2*2*2 = 16개의 상태가 있다.
0000
0001
0010
0011
0100
0101
0110
0111
.
.
.
1111
이것은 결국 2진수이기도 해서 십진수로 변환이 된다.
즉, 상태 하나하나에 대입되는 숫자가 있다는 것이다.
0000 = 0
0001 = 1
0010 = 2
0011 = 3
0100 = 4
0101 = 5
0110 = 6
0111 = 7
.
.
.
1111 = 16
마치 청기백기처럼 A는 키고! B는 끄고! C도 끄고! D는 키고! ... 이런식으로 bool값이 각 개체마다 주어지고
매번 상태를 바꿔가야한다면 bool 변수 12개를 생성하는 것보다 12칸짜리 비트플래그 1개를 만드는게 훨씬 효율적이다.

작동법은 링크된 블로그가 잘 되어있으므로 그쪽을 사용하자^^