|
| 1 | +--- |
| 2 | +sidebar_position: 4 |
| 3 | +title: 컴퓨터 산술과 논리연산 |
| 4 | +--- |
| 5 | + |
| 6 | +## 1. 개요 |
| 7 | + |
| 8 | +컴퓨터의 가장 기본적인 기능은 수치에 대한 산술적 계산과 논리 데이터에 대한 연산을 수행하는 것입니다. 이는 정수(integer) 및 부동소수점 수(floating-point number)의 연산과 0과 1의 이진 데이터(binary data) 연산으로 나눌 수 있습니다. |
| 9 | + |
| 10 | +이러한 연산은 |
| 11 | + |
| 12 | +### **산술논리연산장치(ALU: Arithmetic Logic Unit)** |
| 13 | + |
| 14 | +에서 담당합니다. |
| 15 | + |
| 16 | +--- |
| 17 | + |
| 18 | +## 2. ALU의 구성 요소 |
| 19 | + |
| 20 | +ALU는 다음과 같은 주요 구성 요소로 이루어져 있습니다: |
| 21 | + |
| 22 | +- **산술 연산 장치:** 덧셈, 뺄셈, 곱셈, 나눗셈 등 산술 연산 수행 |
| 23 | +- **논리 연산 장치:** AND, OR, XOR, NOT 등 논리 연산 수행 |
| 24 | +- **시프트 레지스터 (shift register):** 비트들을 좌/우로 이동시키는 레지스터 |
| 25 | +- **보수기 (complementer):** 2진 데이터를 2의 보수로 변환하여 음수 표현/뺄셈 처리 |
| 26 | +- **상태 레지스터 (status register):** 연산 결과의 상태 플래그(C, S, Z, V 등) 저장 |
| 27 | + |
| 28 | +--- |
| 29 | + |
| 30 | +## 3. 정수의 표현 |
| 31 | + |
| 32 | +컴퓨터는 2진수 체계를 사용하여 수를 표현합니다. 정수 표현 방식에는 여러 가지가 있습니다. |
| 33 | + |
| 34 | +- **부호 없는 정수 표현:** 모든 비트를 수의 크기를 나타내는 데 사용 |
| 35 | + - 예: 8비트 2진수 `00111001 = 57`, `11111111 = 255` |
| 36 | + - 일반식: `$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$` |
| 37 | +- **음수 표현 방법:** |
| 38 | + - **부호화-크기 표현:** 맨 좌측 비트는 부호, 나머지는 크기. 0=양수, 1=음수. 0에 대한 표현이 두 개(+0, -0) |
| 39 | + - 최상위 비트가 0이면 양수, 1이면 음수를 나타냅니다. |
| 40 | + - 단점: "덧셈과 뺄셈을 수행하기 위해서는 부호 비트와 크기를 비교하여 처리하는 복잡한 과정이 필요"하며, "0에 대한 표현이 두 개 존재함(+0, -0)"하여 비효율적입니다. |
| 41 | + - **1의 보수 표현:** 모든 비트 반전(0↔1)로 음수 표현 |
| 42 | + - **2의 보수 표현:** 모든 비트 반전 후 1 더함. 뺄셈을 덧셈으로 변환 가능, 0의 표현이 하나라 가장 널리 사용 |
| 43 | + - n비트 2의 보수 범위: `$-(2^{n-1})$ ~ $+(2^{n-1}-1)$` (예: 8비트 → -128 ~ +127) |
| 44 | +- **비트 확장(bit extension):** 2의 보수 표현에서 상위 비트는 부호 비트와 같은 값으로 세트 (**부호-비트 확장**) |
| 45 | + |
| 46 | +--- |
| 47 | + |
| 48 | +## 4. 논리 연산 |
| 49 | + |
| 50 | +컴퓨터는 이진 데이터를 대상으로 다양한 논리 연산을 수행합니다. |
| 51 | + |
| 52 | +- **NOT:** 모든 비트 반전 (0→1, 1→0) |
| 53 | +- **AND:** 두 데이터의 대응 비트 AND |
| 54 | +- **OR:** 두 데이터의 대응 비트 OR |
| 55 | +- **XOR:** 두 데이터의 대응 비트 exclusive-OR |
| 56 | + |
| 57 | +**특정 용도의 논리 연산:** |
| 58 | + |
| 59 | +- **선택적-세트:** B의 1인 위치에 대응하는 A의 비트를 1로 세트 (OR) |
| 60 | +- **선택적-보수:** B의 1인 위치에 대응하는 A의 비트를 보수로 변환 (XOR) |
| 61 | +- **마스크(mask):** B의 0인 위치에 대응하는 A의 비트를 0으로 (AND) |
| 62 | +- **삽입(insert):** 특정 위치에 새로운 비트 삽입 (AND 후 OR) |
| 63 | +- **비교(compare):** A와 B를 XOR, 모두 같으면 Z 플래그 1 |
| 64 | + |
| 65 | +--- |
| 66 | + |
| 67 | +## 5. 시프트(Shift) 연산 |
| 68 | + |
| 69 | +시프트 연산은 레지스터 내 데이터 비트들을 이동시키는 연산입니다. |
| 70 | + |
| 71 | +- **논리적 시프트 (Logical Shift):** |
| 72 | + - **좌측 시프트:** 모든 비트 좌측 이동, 최하위 비트에 0 삽입, 최상위 비트 버림 |
| 73 | + - **우측 시프트:** 모든 비트 우측 이동, 최상위 비트에 0 삽입, 최하위 비트 버림 |
| 74 | +- **순환 시프트 (Circular Shift, Rotate):** |
| 75 | + - **좌측:** 최상위 비트 → 최하위 비트 |
| 76 | + - **우측:** 최하위 비트 → 최상위 비트 |
| 77 | +- **산술적 시프트 (Arithmetic Shift):** |
| 78 | + - **좌측:** 부호 비트 제외 좌측 이동, 곱셈에 활용 |
| 79 | + - **우측:** 부호 비트 유지, 우측 이동, 나눗셈에 활용 |
| 80 | +- **C 플래그 포함 시프트:** 캐리(C) 플래그 포함 이동 (SHLC, SHRC, RLC, RRC 등) |
| 81 | + |
| 82 | +--- |
| 83 | + |
| 84 | +## 6. 정수의 산술 연산 |
| 85 | + |
| 86 | +컴퓨터의 기본 산술 연산은 다음과 같습니다. |
| 87 | + |
| 88 | +- **보수화 (2의 보수 변환):** A → A + 1 (A의 모든 비트 반전 후 1 더하기) |
| 89 | +- **덧셈:** A + B |
| 90 | +- **뺄셈:** A - B (2의 보수로 변환 후 덧셈) |
| 91 | +- **곱셈:** A × B |
| 92 | +- **나눗셈:** A ÷ B |
| 93 | +- **증가 (increment):** A + 1 |
| 94 | +- **감소 (decrement):** A - 1 |
| 95 | + |
| 96 | +### 덧셈 연산 |
| 97 | + |
| 98 | +- 2의 보수로 표현된 수들의 덧셈은 "두 수를 더하고, 올림수 발생 시 버림"으로 수행 |
| 99 | +- **병렬 가산기 (Parallel Adder):** 비트 수만큼의 전가산기(full-adder)로 구성 |
| 100 | +- **상태 플래그:** Carry(올림수), Sign(부호), Zero(0), Overflow(오버플로우) |
| 101 | +- **덧셈 오버플로우:** 결과가 범위를 초과할 때 발생, 두 올림수의 XOR로 검출 $V = C_4 \oplus C_3$ |
| 102 | + |
| 103 | +### 뺄셈 연산 |
| 104 | + |
| 105 | +- 뺄셈은 "덧셈을 이용해 수행" (A - B = A + (-B), B를 2의 보수로 변환 후 더함) |
| 106 | +- **병렬 가감산기 (Parallel Adder-Subtracter):** 덧셈/뺄셈 모두 수행, 제어 신호 M으로 연산 선택 (M=0: 덧셈, M=1: 뺄셈) |
| 107 | +- **뺄셈 오버플로우:** 덧셈 오버플로우와 동일하게 검출 $V = C_4 \oplus C_3$ |
| 108 | + |
| 109 | +--- |
| 110 | + |
| 111 | +## 요약 |
| 112 | + |
| 113 | +컴퓨터 산술 및 논리 연산은 CPU의 근본적인 기능입니다. 수치에 대한 산술 연산(정수/부동소수점)과 2진 데이터에 대한 논리 연산 모두 ALU에서 수행됩니다. |
| 114 | + |
| 115 | +- **2의 보수 표현**은 효율적인 음수 표현과 뺄셈 처리를 가능하게 하여 현대 컴퓨터에서 널리 사용 |
| 116 | +- **시프트 연산**과 다양한 논리 연산은 데이터 처리의 핵심 역할 |
| 117 | +- **ALU 구성:** 산술 연산 장치, 논리 연산 장치, 시프트 레지스터, 보수기, 상태 레지스터 등 |
0 commit comments