OPEN HYPER STEP
← 목록으로 (math)
MATH · 12 / 15
math
CHAPTER 12 / 15
읽기 약 2
FUNCTION

비트 연산: 0과 1의 마법


핵심 개념

비트 단위 AND·OR·XOR·NOT·시프트 — 권한 플래그(chmod)·RGB 추출·짝수/홀수 판별 등 실전 활용.

본문

비트 연산 6종

연산기호동작
AND&두 비트 모두 1일 때만 1
OR|둘 중 하나라도 1이면 1
XOR^두 비트가 다를 때만 1
NOT~비트 반전
Left Shift<<왼쪽으로 이동 (×2)
Right Shift>>오른쪽으로 이동 (÷2)

비트 연산 시각화

PYTHON📋 코드 (25줄)
# 8비트 표현으로 보기
def bin8(n):
    return bin(n & 0xFF)[2:].zfill(8)

a = 0b1100  # 12
b = 0b1010  # 10

print(f"  a = {bin8(a)}  ({a})")
print(f"  b = {bin8(b)}  ({b})")
print(f"a & b = {bin8(a & b)}  ({a & b})  # AND")
print(f"a | b = {bin8(a | b)}  ({a | b})  # OR")
print(f"a ^ b = {bin8(a ^ b)}  ({a ^ b})  # XOR")
print(f"  ~a = {bin8(~a)}  ({~a})  # NOT (2의 보수)")
print(f"a << 1 = {bin8(a << 1)}  ({a << 1})  # << 1 (×2)")
print(f"a >> 1 = {bin8(a >> 1)}  ({a >> 1})  # >> 1 (÷2)")

# 결과:
#   a = 00001100  (12)
#   b = 00001010  (10)
# a & b = 00001000  (8)
# a | b = 00001110  (14)
# a ^ b = 00000110  (6)
#   ~a = 11110011  (-13)
# a << 1 = 00011000  (24)
# a >> 1 = 00000110  (6)

실전 1 — Linux 권한 (chmod)

PYTHON📋 코드 (29줄)
# Linux 파일 권한은 9비트 (사용자/그룹/타인 × rwx)
# rwx = 4+2+1 = 7

# 비트마스크 정의
READ    = 0b100  # 4
WRITE   = 0b010  # 2
EXECUTE = 0b001  # 1

def add_permission(current, perm):
    return current | perm  # OR — 비트 켜기

def remove_permission(current, perm):
    return current & ~perm  # AND NOT — 비트 끄기

def has_permission(current, perm):
    return (current & perm) == perm


# rwx (모든 권한)
perms = READ | WRITE | EXECUTE
print(bin(perms))  # 0b111 = 7

# 쓰기 제거
perms = remove_permission(perms, WRITE)
print(bin(perms))  # 0b101 = 5 (r-x)

# 읽기 권한 확인
print(has_permission(perms, READ))     # True
print(has_permission(perms, WRITE))    # False

실전 2 — RGB 색상 추출

PYTHON📋 코드 (26줄)
# RGB 색상은 24비트 (R 8비트 + G 8비트 + B 8비트)
# 0xRRGGBB 형태

def hex_to_rgb(color):
    """0xFF6B35 → (255, 107, 53)"""
    r = (color >> 16) & 0xFF  # 상위 8비트
    g = (color >> 8) & 0xFF   # 중간 8비트
    b = color & 0xFF          # 하위 8비트
    return r, g, b


def rgb_to_hex(r, g, b):
    """(255, 107, 53) → 0xFF6B35"""
    return (r << 16) | (g << 8) | b


print(hex_to_rgb(0xFF6B35))         # (255, 107, 53)
print(hex(rgb_to_hex(255, 107, 53))) # '0xff6b35'


# 색상 반전 (XOR)
def invert_color(color):
    return color ^ 0xFFFFFF


print(hex(invert_color(0xFF6B35)))  # '0x94caa' = 보색

실전 3 — 짝수/홀수 판별

PYTHON📋 코드 (30줄)
# n이 홀수면 마지막 비트가 1, 짝수면 0
def is_odd(n):
    return (n & 1) == 1

def is_even(n):
    return (n & 1) == 0


for i in range(10):
    print(f"{i}: {'홀수' if is_odd(i) else '짝수'}")
# 0: 짝수
# 1: 홀수
# 2: 짝수
# ...


# 일반적인 % 2 보다 약 2~5배 빠름 (CPU 비트 연산이 나눗셈보다 빠름)
import time

n = 100_000_000

t0 = time.perf_counter()
for i in range(n):
    _ = i & 1
print(f"비트: {(time.perf_counter() - t0)*1000:.1f}ms")

t0 = time.perf_counter()
for i in range(n):
    _ = i % 2
print(f"  %: {(time.perf_counter() - t0)*1000:.1f}ms")

실전 4 — 비트마스크로 옵션 플래그

PYTHON📋 코드 (30줄)
# 멀티 옵션 — 비트 위치마다 의미 부여
class Flag:
    NONE       = 0b00000
    BOLD       = 0b00001
    ITALIC     = 0b00010
    UNDERLINE  = 0b00100
    STRIKE     = 0b01000
    BLINK      = 0b10000


def render(text, flags):
    parts = []
    if flags & Flag.BOLD:
        parts.append('B')
    if flags & Flag.ITALIC:
        parts.append('I')
    if flags & Flag.UNDERLINE:
        parts.append('U')
    if flags & Flag.STRIKE:
        parts.append('S')
    return f"{','.join(parts)}: {text}"


# 굵게 + 기울임
print(render("Hello", Flag.BOLD | Flag.ITALIC))
# B,I: Hello

# 굵게 + 밑줄 + 취소선
print(render("Test", Flag.BOLD | Flag.UNDERLINE | Flag.STRIKE))
# B,U,S: Test

다음 챕터

CH.13 "카르노 맵" — 복잡한 논리식을 시각적으로 단순화하는 도구.


AI 프롬프트
🤖 AI에게 잘 물어보는 법 — 모델·전략별 프롬프트
Claude

무료: Sonnet 4.6 / Pro $20/mo: Opus 4.6

내 코드에서 boolean 플래그들을
비트마스크로 통합 가능한 위치와
메모리 절감 효과를 분석해줘.
ChatGPT

무료: GPT-5.5 / Plus $20/mo: GPT-5.5 Pro

리눅스/유닉스 시스템의 권한 모델과
Windows ACL 비교를 비트 연산
관점에서 알려줘.
Gemini

무료: 2.5 Flash / Pro $19.99/mo: 3.1 Pro

내 데이터에서 비트 연산으로 처리
가능한 패턴(체크섬/해시/플래그)을 찾고
성능 향상 시뮬레이션을 보고해줘.
Grok

무료: Grok 4.1 / SuperGrok $30/mo

2026년 임베디드/IoT/게임 분야에서
비트 연산 사용 빈도와 일반 웹/앱 차이를
실무 관점에서 솔직히 알려줘.

⭐ 이것만 기억하세요
비트 연산: 0과 1의 마법 이 3가지만 확실히 잡으세요
1.비트 연산은 0과 1 단위 AND/OR/XOR — 일반 boolean 연산을 32~64개 묶음으로 한꺼번에 처리
2.Linux chmod·RGB 색상·플래그·체크섬·암호 — 실전에서 비트 연산이 가장 효과적인 분야
3.다음 챕터 CH.13에서 카르노 맵 — 4변수 이상 논리식을 시각적으로 최소화하는 도구


공유하기
진행도 12 / 15