오븐 노트

[C++] 비트 연산과 비트 플래그 본문

Develop/C++

[C++] 비트 연산과 비트 플래그

오 븐 2022. 5. 16. 11:18

비트 단위의 조작이 필요할 때 사용 (게임 데이터 등)

각 비트에 의미를 부여해서 boolean 처럼 사용 할 수 있다.

Bit Flag ~ bitwise not 단일 숫자의 모든 비트를 대상으로 0은 1, 1은 0으로 뒤바꿈
& bitwise and 두 숫자의 모든 비트 쌍을 대상으로 and 연산
| bitwise or 두 숫자의 모든 비트 쌍을 대상으로 or 연산
^ bitwise xor 두 숫자의 모든 비트 쌍을 대상으로 xor 연산
<< 비트 좌측 이동 시프트 비트열을 N만큼 왼쪽으로 이동

왼쪽으로 넘치는 N개의 비트는 버림

새로 생성되는 오른쪽의 비트는 0
>> 비트 우측 이동 시프트 비트열을 N만큼 오른쪽으로 이동

오른쪽으로 넘치는 N개의 비트는 버림

※새로 생성되는 왼쪽의 비트는 부호 비트가 존재할 경우 부호 비트를 따라감※
이외에는 0으로 생성됨

때문에 bit 단위로 무언가를 할 때에는 unsigned로 생성하는 것이 좋음
#include <iostream>
using namespace std;

unsigned char flag;

int main()
{
	//0b0000 [무적][변이][스턴][에어본]

	// 무적 상태
	flag = (1 << 3);

	// 무적 + 변이
	flag |= (1 << 2);

	// 무적인가?
	// bitmask : (1 << 3) 부분. 가면을 씌워 확인한다
	bool invincible = (flag & (1 << 3)) != 0;

	// 무적 or 스턴
	bool mask = (1 << 3) | (1 << 1);
	bool stunOrInvincible = ((flag & 0b1010) != 0);
}

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 - 인프런 | 강의
 
C++ 카테고리의 글은 인프런 Rookiss님의 강의를 공부하며 정리하는 내용입니다.
이미 알고 있는 내용도 다시 정리 되어있을 수 있습니다.

 

모든 글은 제가 공부하기 위해 작성합니다.

'Develop > C++' 카테고리의 다른 글

[C++] 유의사항  (0) 2022.05.23
[C++] const와 메모리 구조  (0) 2022.05.16
[C++] 문자와 문자열  (0) 2022.05.11
[C++] 불리언과 부동소수점  (0) 2022.05.11
[C++] 정수  (0) 2022.05.11