비트 조작
Bit mask는 여러 boolean option을 unsigned integer에 압축합니다.
비트 조작이란?
Bit mask는 여러 boolean option을 unsigned integer에 압축합니다.
Flag를 set, clear, toggle, test합니다.
중요한 점
- 빈 입력, 한 요소, 중복, 정렬된 입력을 테스트하세요.
- 정확성과 최적화를 분리하세요.
- 프로덕션에서는 standard library를 우선하세요.
C와 C++ 코드 예제
C
main.c
#include <stdio.h>
int main(void) {
unsigned flags = 0;
flags |= 1u << 1;
flags |= 1u << 3;
flags ^= 1u << 1;
printf("flags=%u bit3=%u\n", flags, (flags >> 3) & 1u);
}
flags=8 bit3=1
C++
main.cpp
#include <bitset>
#include <iostream>
int main() {
std::bitset<4> flags;
flags.set(1);
flags.set(3);
flags.flip(1);
std::cout << "flags=" << flags
<< " bit3=" << flags.test(3) << '\n';
}
flags=1000 bit3=1
C와 C++ 비교
예측 가능한 shift에는 unsigned를 씁니다. C는 mask, C++ bitset은 이름 있는 연산과 binary 출력을 제공합니다.
C
Loop, pointer, length와 buffer가 명시적입니다.
C++
Iterator와 algorithm이 연산과 저장 방식을 분리합니다.
연습 문제
두 버전을 실행하고 수정하여 각 언어의 보장을 관찰하세요.
- 각 비교를 직접 추적하세요.
- 중복과 극값을 테스트하세요.
- Standard library와 benchmark하세요.