2021. 3. 7. 14:54ㆍC++
이번엔 비트 연산과 비트 플래그에 대해 알아보겠습니다.
비트 연산자는 다음과 같습니다.

계산기를 통해 간단히 예를 들어보겠습니다.
① ~ bitwise not
1바이트 크기에 다음과 같은 정수가 있다고 생각해보겠습니다.

여기에 not연산을 하게 되면 1은 0으로, 0은 1로 바뀌게 되면서

위와 같은 비트로 바뀌게 됩니다.
② & bitwise and

1바이트 정수 두 개를 위와같이 설정하고 &연산을 하게되면 각 자리수를 비교해 두개 모두 1인 경우에만 1을 내뱉고 아닌 경우는 0을 내뱉게 됩니다.
그리고 연산 결과는 다음과 같습니다.

③ | bitwise or

이번엔 아까와 같이 1바이트 정수 두 개를 설정하고 |연산을 하게 되면 각 비트를 비교해 둘 중 하나만 1 이어도 1을 내뱉고 둘 다 0일 때만 0을 내뱉게 됩니다.
연산 결과는 다음과 같습니다.

④ ^ bitwise xor
xor 연산은 두 비트를 비교해 같으면 0 다르면 1을 내뱉는 연산입니다.

아까와 같이 두 정수를 설정하고 xor연산을 하면

위와 같은 결과를 갖게 됩니다.
비트 연산은 비트 플래그에서 유용하게 사용됩니다.
예를 들어 게임에서 여러 가지 버프와 디버프 그리고 상태 이상을 확인할 때에 비트 플래그를 이용할 수 있습니다.

unsigned를 붙여서 << , >>연산을 하더라고 부호가 바뀌지 않게 설정하고 char형식으로 flag를 하나 생성하였습니다.
그리고 위와 같이 4가지 상태 이상이 있다고 가정하고 간단한 예시를 들어보겠습니다.

위와 같이 연산을 하게 되면 스턴 상태로 바로 변환을 시킬 수 있습니다.
그리고 상태 이상상태를 확인하는 것을 예시로 들어보겠습니다.

flag와 비트 연산을 비교해서 참 거짓을 반환하는 변수를 추가해서 실행해보았습니다.

조사식을 통해 확인해 본 결과 flag가 (1 << 3) 상태이기 때문에 true값을 반환하는 것을 알 수 있었습니다.
'C++' 카테고리의 다른 글
| C++) 08. 분기문 (0) | 2021.03.09 |
|---|---|
| C++) 07.const, 메모리 구조 (0) | 2021.03.08 |
| C++) 05. 비교, 논리 연산자 (0) | 2021.02.17 |
| C++) 04. 산술, 증감 연산자 (0) | 2021.02.15 |
| C++) 03. 문자와 문자열 (0) | 2021.02.12 |