1. 수 체계(Number Systems)
수 체계의 정의
수 체계는 수를 나타내고, 표현하고, 계산하기 위한 체계적인 규칙과 기호의 집합이다
2. 위치적 기수법(Positional Number System)
위치적 기수법의 정의
각 자릿수의 위치에 따라 기수(Base)의 거듭제곱을 가중치로 곱해 숫자를 표기하는 방식이다
기수(Radix/Base, ): 진법에서 숫자를 표현하는 기준이 되는 수로, 한 자리에서 사용할 수 있는 서로 다른 기호의 총 개수를 의미한다
10진수(Decimal) 표현 예시:
3. 10진수를 진수로 변환하기
10진수를 다른 진법으로 바꿀 때는 정수부와 소수부의 계산 방식을 다르게 적용해야 한다
3.1 정수부: 몫-나머지 방식 (Quotient-Remainder)
10진수 정수를 다른 진법으로 바꿀 때 가장 널리 쓰이는 방법은 기수 로 계속 나누는 중첩 확장 원리를 사용한 몫-나머지 방식을 사용한다
중첩 확장(Nested Expansion)
진법 변환의 기본이 되는 다항식을 목표 기수 이라는 공통 인수로 계속 묶어내는 수학적 원리이다. 이를 실제 계산에 직관적으로 적용한 것이 몫-나머지 방식이다
계산 방법: 몫이 0이 될 때까지 기수 로 계속 나누면서 나오는 나머지를 구한다. 계산된 나머지를 아래에서 위로(역순으로) 읽어, 하위 자릿수(LSB)부터 상위 자릿수 방향으로 차례대로 적어준다
3.2 소수부: 반복 곱셈 방식(Repeated Multiplication)
계산 방법: 소수부에 기수 을 곱한 뒤, 결과로 나오는 값의 정수 부분을 떼어내어 변환된 진수의 자릿수로 적용한다. 남은 소수부에 다시 을 곱하는 과정을 소수부가 0이 될 때까지 반복한다(정수부 변환과 달리, 구해진 정수들을 위에서 아래 순서대로 읽어 적는다)
무한 소수 주의
처럼 기수 을 계속 곱해도 소수 부분이 절대 0이 되지 않고 같은 패턴의 값이 반복되는 경우, 순환 소수 형태로 표현된다
- 예시:
4. 일반적인 진법 변환(진접 r^'진법)
임의의 진법에서 바로 다른 진법으로 직접 변환하기 어려울 때는 10진수를 징검다리로 활용하는 것이 일반적이다. 먼저 주어진 수를 위치적 기수법을 통해 10진수로 변환한 후, 앞서 배운 분할 방식(나누기/곱하기)을 적용해 목표하는 r^'진수로 다시 변환한다
-
변환 예시: 를 7진수로 변환하기
그림 4. 일반적인 진법 변환 에시
5. 이진 연산(Binary Arithmetic)
이진 연산의 원리
기본 원리는 10진수와 동일하지만, 2를 기준으로 자리올림(Carry)과 빌림(Borrow)이 발생한다는 점이 특징이다
기본 사칙 연산의 방법
-
덧셈(Addition)
그림 5. 이진 연산의 덧셈
-
뺄셈(Subtraction)
그림 6. 이진 연산의 뺄셈
-
곱셈(Multiplication)
그림 7. 이진 연산의 곱셈
-
나눗셈(Division)
그림 8. 이진 연산의 나눗셈
6. 음수 표현 방식(Negative Number Representation)
컴퓨터가 음수 부호를 인식하고 표현하기 위해 사용하는 세 가지 주요 방식을 사용한다
6.1 부호 크기 표현(Sign-Magnitude)
- 구조: MSB(가장 왼쪽 최상위 비트)를 부호 비트(0: 양수, 1: 음수)로 사용하고, 나머지 비트로 절댓값을 표현한다
- 예시:
- 표현 범위(비트): (예: 4비트일 때 )
- 한계점: 과 으로 0이 두 개 존재하며, 연산 장치(가산기) 설계가 복잡해진다
6.2 1의 보수 표현(1’s Complement)
1의 보수
양수 이진수의 모든 비트를 반전(0 1, 1 0)시켜서 음수를 만드는 방식이다
- 수학적 정의:
- 표현 범위: (예: 4비트일 때 )
- 한계점: 부호 크기 표현과 마찬가지로 +0과 -0 두 개가 존재하며, 덧셈 시 발생하는 자리올림을 끝자리에 다시 더해줘야 하는 번거로움이 있다
6.3 2의 보수 표현(2’s Complement)
2의 보수
컴퓨터에서 음수를 표현하고 뺄셈을 덧셈으로 처리하기 위해 가장 널리 사용하는 방식이다
- 변환 방법: 1의 보수를 취한 뒤 최하위 비트(LSB)에 1을 더한다
- 수학적 정의:
- 표현 범위: (예: 4비트일 때 )
- 장점: 0이 하나(0000)만 존재하여 개의 숫자를 중복 없이 완벽하게 표현할 수 있다
7. 보수를 이용한 이진 덧셈과 뺄셈
7.1 2의 보수 덧셈 및 뺄셈
-
2의 보수 덧셈: 부호 비트를 포함하여 양수인 것처럼 일반적인 뎃셈을 수행한다. 최상위 비트 밖으로 발생하는 올림수(Carry-out)는 무시한다(단, 오버플로우 검사 필요)
그림 11. 2의 보수의 덧셈 예제
-
2의 보수 뺄셈: 뺄셈을 음수의 덧셈으로 변환하여 처리한다. 뺄수의 비트를 반전시킨 후, 가산기의 하위 비트 Carry-in()에 1을 입력하면 하드웨어 추가 없이 곧바로 2의 보수 덧셈과 같은 결과를 얻는다
그림 12. 2의 보수의 뺄셈 예제
7.2 1의 보수 덧셈과 순환 캐리
1의 보수의 덧셈을 진행할 때, 순환 캐리를 사용한다
-
순환 캐리(End-around-Carry): 1의 보수 방식에서 최상위 비트(부호 비트)에서 올림수가 발생하면, 이를 버리지 않고 계산 결과의 최하위 비트(LSB)에 다시 더해준다
그림 13. 1의 보수의 덧셈 예제
오버플로우 (Overflow) 주의
연산 결과가 할당된 비트 범위를 넘어가는 현상이다. 부호가 같은 두 수를 더했을 때 결과의 부호가 다르게 나오면 오버플로우가 발생한 것으로 판단한다
8. 실수의 이진 표현(Binary Representation of Fractions)
실수를 이진수로 변환할 때는 정수부와 소수부를 나누어 각각의 규칙에 따라 처리한다
- 정수부: 4, 8, 16비트 등 고정된 길이를 가지며, 가장 앞의 MSB가 부호를 결정한다
- 소수부: 소수의 정밀도에 따라 가변적인 길이를 가질 수 있다
- 소수부 변환 계산법: 소수부에 2를 계속 곱하여 소수 부분이 0이 될 때까지 반복하며, 결과로 나오는 정수 부분을 위해서 아래 순서대로 나열한다
- 예시: 의 이진수 변환
- 결과:
- 예시: 의 이진수 변환
9. 음의 소수 표현(Negative Fractions)
음의 실수를 표현할 때도 마찬가지로 정수부와 소수부로 나누어 보수 시스템을 적용한다
- 정수부: 양수 표현 방식과 동일하며 고정된 길이를 가진다. MSB가 전체 숫자의 부호를 나타낸다
- 소수부: 1의 보수 또는 2의 보수 시스템을 그대로 적용한다
- 2의 보수: 가변 길이 또는 고정 길이 표현이 모두 가능하다
- 1의 보수: 정확한 변환을 위해 반드시 전체 비트 길이를 고정한 상태에서 사용해야 한다
9.1 보수 방식별 변환 과정 비교
예시: (양수 형태 ) 변환 과정
| 구분 | 1의 보수 방식 | 2의 보수 방식 |
|---|---|---|
| 변환 방법 | 모든 비트를 반전 | 1의 보수 취한 후 가장 끝자리(LSB)에 |
| 단계 1 (양수) | ||
| 단계 2 (반전) | ||
| 단계 3 (+1) | - |
9.2 계산 결과 검증 방법
- 방법 1: 역과정 수행
- 구한 음수 결과값에 대해 다시 동일한 보수 연산(비트 반전 후 2의 보수라면 LSB에 1 더하기)을 수행해본다
- 이 결과가 원래의 양수 값으로 정확히 돌아오면 올바르게 변환된 것이다
- 방법 2: 2의 거듭제곱 가중치 합산
- 각 비트 자리에 할당된 위치 가중치를 모두 더해 원래의 10진수 값과 비교하는 방식이다
- 부호 비트 (MSB): 음수이므로 의 가중치를 가진다
- 2의 보수: 이 가중치 합산 방식이 항상 완벽하게 성립한다
- 1의 보수: LSB의 위치(전체 비트 길이)가 어디냐에 따라 값이 달라지므로, 반드시 전체 비트 길이를 명확히 고정한 상태에서만 계산이 성립한다
10. 숫자를 위한 이진 코드(Binary Codes for Numbers)
이진 코드의 개념
십진수의 각 자릿수를 고정된 길이의 이진수 묶음으로 대응시키는 방식이다 복잡한 진법 변환 연산 없이 각 자릿수를 즉시 변환할 수 있다는 장점이 있다
10.1 가중치 코드(Weighted Codes)
각 비트 자리마다 고유한 가중치(값)이 정해져 있는 코드이다
- 수학적 공식:
- 주요 종류:
- 8-4-2-1 (BCD): 가장 보편적인 방식으로, 10진수 한 자리를 4비트 이진수로 표현한다
- 6-3-1-1: 특정 논리 회로 설계 시 최적화를 위해 사용되는 변형 가중치 코드이다
10.2 비가중치 및 특수 코드 (Non-weighted & Special Codes)
- Excess-3 (3 초과 코드): BCD 코드에 이진수 3()을 더해 만든다
- 자기 보수 (Self-Complementing) 특성: 비트를 반전시키면 10진수 9에 대한 보수가 나와서, 컴퓨터의 뺄셈 회로를 단순화하는 데 매우 유리하다
- 2-out-of-5 코드: 5비트 중 오직 2개만 1이 되도록 약속한 코드이다
- 이 규칙을 벗어나면 에러로 간주하므로 주로 에러 검출 용도로 쓰인다
- 그레이 코드 (Gray Code): 인접한 숫자로 넘어갈 때 오직 한 비트만 변하도록 설계된 코드이다
- 일반 이진수는 3()에서 4()로 갈 때 세 비트가 동시에 변하지만, 그레이 코드는 단 한 자리만 변하여 물리적 전송 오류를 줄여준다
11. 영숫자 코드 (Alphanumeric Codes)
숫자뿐만 아니라 문자, 기호, 제어 문자 등을 표현하기 위한 약속이다
11.1 아스키 코드 (ASCII)
- 기본적으로 7비트를 사용하여 128()개의 문자를 표현한다
- 현대에는 통신 안정성과 추가 문자 표현을 위해 1비트를 더한 8비트 확장 형태를 주로 사용한다
11.2 패리티 비트 (Parity Bit)
패리티 비트
데이터 전송 중 발생하는 에러를 감지하기 위해 추가하는 1비트이다. 주로 아스키 코드의 가장 왼쪽 비트(MSB)를 활용한다
- 짝수 패리티 (Even Parity): 데이터 내 1의 전체 개수가 짝수가 되도록 패리티 비트를 맞춘다
- 홀수 패리티 (Odd Parity): 데이터 내 1의 전체 개수가 홀수가 되도록 패리티 비트를 맞춘다