C/C++ 알고리즘

비트 조작

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하세요.