programing

C의 플래그를 삭제하려면 어떻게 해야 하나요?

prostudy 2022. 5. 30. 22:02
반응형

C의 플래그를 삭제하려면 어떻게 해야 하나요?

플래그가 있는 변수가 있는데 그 중 하나를 제거하고 싶습니다.그런데 어떻게 빼야 할지 모르겠어요.

깃발 세팅 방법은 다음과 같습니다.

my.emask |= ENABLE_SHOOT;

단답

설정 해제할 플래그비트 단위 NOT 연산을 사용하여 현재 값에 대해 비트 단위 AND 연산을 수행할 수 있습니다.비트 단위로 NOT는 모든 비트(0 => 1, 1 => 0)를 반전합니다.

flags = flags & ~MASK;또는flags &= ~MASK;.

장황한 답변

ENABLE_WALK  = 0    // 00000000
ENABLE_RUN   = 1    // 00000001
ENABLE_SHOOT = 2    // 00000010
ENABLE_SHOOTRUN = 3 // 00000011

value  = ENABLE_RUN     // 00000001
value |= ENABLE_SHOOT   // 00000011 or same as ENABLE_SHOOTRUN

설정 해제할 값의 Bitwise AND를 사용하여 Bitwise AND를 실행하는 경우.

value = value & ~ENABLE_SHOOT // 00000001

실제로 하고 있는 것은 다음과 같습니다.

      0 0 0 0 0 0 1 1     (current value)
   &  1 1 1 1 1 1 0 1     (~ENABLE_SHOOT)
      ---------------
      0 0 0 0 0 0 0 1     (result)
my.emask &= ~(ENABLE_SHOOT);

몇 개의 플래그를 클리어하려면:

my.emask &= ~(ENABLE_SHOOT|SOME_OTHER|ONE_MORE);

조작되는 변수가 int보다 클 경우 'and not' 식에서 사용되는 값도 같아야 합니다.실제로 작은 타입을 사용하는 것은 피할 수 있지만, 상수가 충분히 큰지 확인하기 위해 타입 접미사를 사용하는 것이 가장 좋은 경우는 충분히 있습니다.

언급URL : https://stackoverflow.com/questions/3920307/how-can-i-remove-a-flag-in-c

반응형