비트 연산과 플래그

CJB_ny·2022년 7월 29일
0

C++ 정리

목록 보기
19/95
post-thumbnail

대표적으로 비트 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; // 이런식으로 마스크를 씌워서 현재 상태가 뭔지 알 수 있다.
profile
https://cjbworld.tistory.com/ <- 이사중

0개의 댓글