#include <iostream>
using namespace std;
unsigned char flag; //부호를 없애야 >>을 하더라도 부호비트가 딸려오지 않음.
int main()
{
#pragma region 비트연산
//비트연산
//비트 단위의 조작이 필요할 때
//- 대표적으로 BitFlag
//- bitwise not
// 단일 숫자의 모든 비트를 대상으로 0은 1, 1은 0으로 바꿈
//& bitwise and
//두 숫자의 모든 비트 쌍을 대상으로 and연산
//| bitwise or
//두 숫자의 모든 비트 쌍을 대상으로 or연산
//^ bitwise xor
//두 숫자의 모든 비트 쌍을 대상으로 xor연산
//<< 비트 좌측 이동
//비트열을 N만큼 왼쪽으로 이동
//왼쪽의 넘치는 N개의 비트는 사라짐.
//오른쪽의 새로운 N개의 비트는 모두 0
//*2를 할 때 자주 보이는 패턴
//>> 비트 우측 이동
//비트열을 N만큼 오른쪽으로 이동
//오른쪽의 넘치는 N개의 비트는 버림.
//왼쪽 생성되는 N개의 비트는
//- 부호 비트가 존재 할 경우 부호 비트를 따라감 (부호있는 정수라면 이 부분을 유의)
//- 아니면 0
//실습
//0b0000 [무적][변이][스턴][에어본]
//무적 상태로 만든다.
flag = (1<<3);
//변이상태를 추가함 ( 무적+변이)
flag |= (1 << 2);
//무적 상태인지 확인을 하고 싶은 경우.
cout<<(flag & (1 << 3))<<endl;
//무적이거나 스턴 상태 인지 확인을 하고 싶은 경우
cout << ((flag & 0b1010)) << endl;
cout << (int)flag << endl;
#pragma endregion
}