본문으로 건너뛰기

컴퓨터 산술과 논리연산

1. 개요

컴퓨터의 가장 기본적인 기능은 수치에 대한 산술적 계산과 논리 데이터에 대한 연산을 수행하는 것입니다. 이는 정수(integer) 및 부동소수점 수(floating-point number)의 연산과 0과 1의 이진 데이터(binary data) 연산으로 나눌 수 있습니다.

이러한 연산은

산술논리연산장치(ALU: Arithmetic Logic Unit)

에서 담당합니다.


2. ALU의 구성 요소

ALU는 다음과 같은 주요 구성 요소로 이루어져 있습니다:

  • 산술 연산 장치: 덧셈, 뺄셈, 곱셈, 나눗셈 등 산술 연산 수행
  • 논리 연산 장치: AND, OR, XOR, NOT 등 논리 연산 수행
  • 시프트 레지스터 (shift register): 비트들을 좌/우로 이동시키는 레지스터
  • 보수기 (complementer): 2진 데이터를 2의 보수로 변환하여 음수 표현/뺄셈 처리
  • 상태 레지스터 (status register): 연산 결과의 상태 플래그(C, S, Z, V 등) 저장

3. 정수의 표현

컴퓨터는 2진수 체계를 사용하여 수를 표현합니다. 정수 표현 방식에는 여러 가지가 있습니다.

  • 부호 없는 정수 표현: 모든 비트를 수의 크기를 나타내는 데 사용
    • 예: 8비트 2진수 00111001 = 57, 11111111 = 255
    • 일반식: $A = a_{n-1} \times 2^{n-1} + a_{n-2} \times 2^{n-2} + ... + a_1 \times 2^1 + a_0 \times 2^0$
  • 음수 표현 방법:
    • 부호화-크기 표현: 맨 좌측 비트는 부호, 나머지는 크기. 0=양수, 1=음수. 0에 대한 표현이 두 개(+0, -0)
      • 최상위 비트가 0이면 양수, 1이면 음수를 나타냅니다.
      • 단점: "덧셈과 뺄셈을 수행하기 위해서는 부호 비트와 크기를 비교하여 처리하는 복잡한 과정이 필요"하며, "0에 대한 표현이 두 개 존재함(+0, -0)"하여 비효율적입니다.
    • 1의 보수 표현: 모든 비트 반전(0↔1)로 음수 표현
    • 2의 보수 표현: 모든 비트 반전 후 1 더함. 뺄셈을 덧셈으로 변환 가능, 0의 표현이 하나라 가장 널리 사용
      • n비트 2의 보수 범위: $-(2^{n-1})$ ~ $+(2^{n-1}-1)$ (예: 8비트 → -128 ~ +127)
  • 비트 확장(bit extension): 2의 보수 표현에서 상위 비트는 부호 비트와 같은 값으로 세트 (부호-비트 확장)

4. 논리 연산

컴퓨터는 이진 데이터를 대상으로 다양한 논리 연산을 수행합니다.

  • NOT: 모든 비트 반전 (0→1, 1→0)
  • AND: 두 데이터의 대응 비트 AND
  • OR: 두 데이터의 대응 비트 OR
  • XOR: 두 데이터의 대응 비트 exclusive-OR

특정 용도의 논리 연산:

  • 선택적-세트: B의 1인 위치에 대응하는 A의 비트를 1로 세트 (OR)
  • 선택적-보수: B의 1인 위치에 대응하는 A의 비트를 보수로 변환 (XOR)
  • 마스크(mask): B의 0인 위치에 대응하는 A의 비트를 0으로 (AND)
  • 삽입(insert): 특정 위치에 새로운 비트 삽입 (AND 후 OR)
  • 비교(compare): A와 B를 XOR, 모두 같으면 Z 플래그 1

5. 시프트(Shift) 연산

시프트 연산은 레지스터 내 데이터 비트들을 이동시키는 연산입니다.

  • 논리적 시프트 (Logical Shift):
    • 좌측 시프트: 모든 비트 좌측 이동, 최하위 비트에 0 삽입, 최상위 비트 버림
    • 우측 시프트: 모든 비트 우측 이동, 최상위 비트에 0 삽입, 최하위 비트 버림
  • 순환 시프트 (Circular Shift, Rotate):
    • 좌측: 최상위 비트 → 최하위 비트
    • 우측: 최하위 비트 → 최상위 비트
  • 산술적 시프트 (Arithmetic Shift):
    • 좌측: 부호 비트 제외 좌측 이동, 곱셈에 활용
    • 우측: 부호 비트 유지, 우측 이동, 나눗셈에 활용
  • C 플래그 포함 시프트: 캐리(C) 플래그 포함 이동 (SHLC, SHRC, RLC, RRC 등)

6. 정수의 산술 연산

컴퓨터의 기본 산술 연산은 다음과 같습니다.

  • 보수화 (2의 보수 변환): A → A + 1 (A의 모든 비트 반전 후 1 더하기)
  • 덧셈: A + B
  • 뺄셈: A - B (2의 보수로 변환 후 덧셈)
  • 곱셈: A × B
  • 나눗셈: A ÷ B
  • 증가 (increment): A + 1
  • 감소 (decrement): A - 1

덧셈 연산

  • 2의 보수로 표현된 수들의 덧셈은 "두 수를 더하고, 올림수 발생 시 버림"으로 수행
  • 병렬 가산기 (Parallel Adder): 비트 수만큼의 전가산기(full-adder)로 구성
  • 상태 플래그: Carry(올림수), Sign(부호), Zero(0), Overflow(오버플로우)
  • 덧셈 오버플로우: 결과가 범위를 초과할 때 발생, 두 올림수의 XOR로 검출 $V = C_4 \oplus C_3$

뺄셈 연산

  • 뺄셈은 "덧셈을 이용해 수행" (A - B = A + (-B), B를 2의 보수로 변환 후 더함)
  • 병렬 가감산기 (Parallel Adder-Subtracter): 덧셈/뺄셈 모두 수행, 제어 신호 M으로 연산 선택 (M=0: 덧셈, M=1: 뺄셈)
  • 뺄셈 오버플로우: 덧셈 오버플로우와 동일하게 검출 $V = C_4 \oplus C_3$

요약

컴퓨터 산술 및 논리 연산은 CPU의 근본적인 기능입니다. 수치에 대한 산술 연산(정수/부동소수점)과 2진 데이터에 대한 논리 연산 모두 ALU에서 수행됩니다.

  • 2의 보수 표현은 효율적인 음수 표현과 뺄셈 처리를 가능하게 하여 현대 컴퓨터에서 널리 사용
  • 시프트 연산과 다양한 논리 연산은 데이터 처리의 핵심 역할
  • ALU 구성: 산술 연산 장치, 논리 연산 장치, 시프트 레지스터, 보수기, 상태 레지스터 등