topic난이도 · 약 20

이진법 · 논리게이트 · CPU 내부

0과 1, AND/OR/NOT 게이트, 덧셈기, 레지스터 — 기계어까지 내려가는 한 번의 여행.

#이진법#논리게이트#AND#OR#CPU사이클
왜 배우는가

내 자바스크립트 한 줄이 결국 어떻게 전기 신호가 되는지 감을 잡으면, "컴퓨터는 똑똑하지 않다"는 본질이 보인다. 그 감각이 있어야 AI가 뱉는 답을 맹신하지 않는다.

컴퓨터는 0과 1만 안다. 전기 신호 '있음/없음', '높음/낮음' 두 가지. 이 비트(bit) 하나가 모든 것의 원자다. 8비트 = 1바이트(0~255 표현), 32비트 = 42억까지, 64비트 = 1800경까지.

text
10진수  2진수      16진수   의미
   0    0000_0000    00      빈 바이트
  42    0010_1010    2A      아스키 '*'
 255    1111_1111    FF      최대 8비트
 256    1_0000_0000  100     9비트 필요
1024    2^10         400     1 KiB
1_048_576  2^20      100000  1 MiB

16진수는 4비트를 한 글자로 압축한 축약. 컬러 코드 `#FF5733`도 결국 3바이트 = 24비트.

논리게이트 3개로 모든 계산이 가능하다. AND(둘 다 1일 때 1), OR(하나라도 1일 때 1), NOT(뒤집기). 여기에 XOR(다르면 1)을 더하면 덧셈기(Adder) 완성.

ABANDORXORNOT A
000001
010111
100110
111100

1비트 덧셈기: 합 = A XOR B, 자리올림 = A AND B. 이걸 8개 이어붙이면 8비트 덧셈기. 곱셈·나눗셈·부동소수점도 전부 AND/OR/NOT 조합이다. 수십억 게이트를 배치한 것이 곧 CPU.

CPU 1사이클 — Fetch(명령어 꺼냄) → Decode(해독) → Execute(ALU 실행) → Writeback(결과 저장)

CPU는 매 사이클마다 4단계를 반복한다. Fetch(메모리에서 다음 명령어 가져옴) → Decode(해독) → Execute(ALU로 실행) → Writeback(결과를 레지스터·메모리에 저장). 3GHz CPU = 초당 30억 번 이 사이클.

text
// 사람 눈에 보이는 코드
total = a + b;

// 컴파일 결과 (x86 어셈블리 비슷하게)
mov  eax, [a]        // a를 레지스터 eax로 로드
add  eax, [b]        // eax에 b 더함 (ALU 사용)
mov  [total], eax    // 결과를 total 주소에 저장

// CPU가 실제 실행
[기계어 이진수]
1000 1011 0000 0101 ...

자바스크립트 → V8이 JIT 컴파일 → 기계어. Claude가 짠 `let total = a + b;`도 결국 이 3단계를 거쳐 실행된다.

이게 왜 중요한가? AI가 생성한 `for` 루프 1만 번 = CPU가 수십만 사이클을 돈다. `for...for` 중첩 = 수십억 사이클. 이 무게감이 있어야 Big O 감각과 성능 개선 판단력이 진짜로 작동한다.

실기 드릴 2문항
edit실기 드릴 · 단답형

두 입력이 모두 1일 때만 1을 출력하는 논리게이트는?

edit실기 드릴 · 단답형

CPU가 한 명령을 처리하는 4단계를 순서대로 쓰시오.