대표적으로 비트 Flag
~ : bitwise not
단일 숫자의 모든 비트를 대상으로 반전
& : bitwise and
두 숫자의 비트 쌍을 대상으로 and 한다.
| : bitwise or
두 숫자의 비트쌍으로 대상으로 or한다.
^ : bitwise xor
두 숫자의 비트쌍을 대상으로 xor한다.
두 숫자가 같으면 0, 다르면 1 출력
이거 특징이 있는데
int a = 1;
int b = 123;
a = a ^ b;
a = a ^ b;
// 하면 원래숫자 튀어나옴. 이 부분 계산기 두들기면 확인 가능함.
상태 빼줄때
https://velog.io/@starkshn/CPP%EC%96%B4%EC%86%8C11%EB%B9%84%ED%8A%B8-%EC%97%B0%EC%82%B0%EC%9E%902
state &= ~Thrisy;
<< : 비트를 N만큼 왼쪽으로 이동
곱하기 2를 할 때 자주보이는 패턴
: 비트를 N만큼 오른쪽으로 이동
부호가 있는 수의 경우 정말 주의 해야함.
부호가 있다는 거의 의미는 cpp기준으로 unsigned가 아닌 경우는
부호비트가 있는 경우임.
부호가 있는 비트의 경우 >> 1 을 하여도 그대로 붙어있다.
한칸 >> 하면 이렇게 됨.
부호 표시를 하는 비트가 있을 수 있기 때문에
비트 연산을 할때에는 unsigned 키워드를 붙인 수를 사용하는 것이 정신건강에 좋다.
"비트 플래그" 는 boolean노가다를 막아 줄 수 있다.
이런 비트 하나하나에다가 "의미"를 부여함.
// 무적 / 변이 / 스턴 / 공중부양
unsigned char flag;
flag = (1 << 3); // 이렇게 8이라는 숫자를 넣음
flag |= (1 << 2); // 변이 부분을 넣어준다.
이제는 무적상태인지 아닌지 확인하고 싶을 경우
unsigned int mask = (1 << 3);
bool result = flag & mask; // 이런식으로 마스크를 씌워서 현재 상태가 뭔지 알 수 있다.