Bitwise

비트 연산 활용

AND, OR, XOR, NOT, 시프트는 정수 안의 플래그 배치를 읽고 쓰기 위한 도구입니다.

mask test(flags & mask) != 0처럼 특정 비트가 켜졌는지 검사할 때 사용합니다.
shift guard1u << n은 n이 타입 비트 수보다 작고 unsigned일 때만 안전하게 읽힙니다.
& mask

권한 플래그 검사

읽기 권한, 상태 비트, 레지스터 필드처럼 여러 플래그 중 일부만 확인합니다.

|= / &= ~

비트 켜기와 끄기

flags |= mask로 설정하고 flags &= ~mask로 해제합니다.

<< / >>

필드 위치 이동

패킷 필드나 색상 채널을 옮길 때는 부호 없는 고정 폭 타입을 우선합니다.

플래그 조합권한, 옵션, 상태값처럼 여러 boolean을 한 정수에 담을 때 enum class와 named mask를 둡니다.
우선순위 괄호&, |, ==가 섞이면 반드시 괄호로 의도를 드러냅니다.
UB 신호음수 시프트, 폭 이상 시프트, signed overflow가 보이면 std::uint32_t 같은 unsigned 고정 폭 타입으로 바꿉니다.

리뷰 신호 3, 8 같은 매직 넘버와 flags == mask 검사가 보이면 mask 이름, 부분 포함 검사, 시프트 범위를 다시 확인합니다.