2.1 디지털 시스템
학습내용
- 디지털 시스템 정의
- 물리 신호에 숫자를 대응시키는 방법
- 컴퓨터가 2진수를 사용하는 이유
📍 디지털 시스템이란?
- digit(숫자) + al(-의)
- 숫자로 표현된 데이터를 처리(계산)하는 시스템
- 컴퓨터는 디지털 시스템의 일종
📍 숫자 표현
- 사람은 10진수 사용
- digit: 자릿수, 손가락(손가락으로 10개의 다른 기호를 표현한다.)
- 아라비아 숫자: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
- 기계는 2진수 사용: 안정된 상태가 2개인 물리신호를 0, 1로 매핑
스위치: off / on
OCR: 표지가 없음 / 까만색
펀치 카드: 구멍을 뚫지 않음 / 구멍을 뚫음
전기 신호: 전류가 흐르지 않음 / 흐름
자기(자석): N극 / S극
📍 2진수 시스템
- 2진수로 표현된 데이터를 처리하는 시스템
- 비트 (bit) = binary + digital: 2진수 한 자리, 0 or 1
📍 2진 데이터의 단위
- 1 ➡️ 비트
- 4 ➡️ 니블 (nibble)
- 8 ➡️ 바이트
- MSB: Most Significant Bit. 2진수 맨앞자리
- LSB: Least Significant Bit. 맨 뒷자리
- MSD: Most Significant Digit
2.2 수의 체계
학습 내용
- 수를 표현하는 원리 (weighted number)
- R진수의 표현과 크기
2.2.1 10진수
- 무게 수 (weighted number): 각 자리에 오는 숫자는 무게가 있다.
- 1234.56
기호(symbol): 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
자리에 따라 무게가 다르다.
1234.56 = 1 10^3 + 2 10^2 + … + 5 10^(-1) + 6 10^(-2)
2.2.2 R진수
📍 R진법의 수
- 기호(symbol): {0, 1, …, R-1}
- 각 자리의 무게: R
2.2.3 수의 표현 범위
📍 수의 종류
- 부호 없는 수(unsigned number): 0을 포함한 양수
- 정수(signed number): …, -1, 0, 1, … (음수, 0, 양수)
- 실수(real number): 소수점을 포함하는 수
📍 n진수로의 표현
📍 수의 표현 범위
- 10진수 n자리: 0 ~ 10^n - 1 = 0 ~ 9…9 (9가 n개)
- R진수 n자리: 0 ~ R^n - 1
2.3 진법 변환
2^10 = 1K (정확히는 1000 vs 1024로 다르기는 하지만 근사값)
2^16 = 64K
2^19 = 512K
2^20 = 1Mega
2^24 = 16Mega
2^27 = 12Mega
2^30 = 1Giga
2^32 = 4Giga
2^34 = 16Giga
2^40 = 1Tera
2^43 = 8Tera
2^47 = 128Tera
2^14 = 16K
2^19 = 512K
2^25 = 32M
2^28 = 256M
2^32 = 4G
2^43 = 8T
2.4 코드
- 숫자 이외의 데이터를 2진수로 표현하는 방법
- 코딩: 문자, 유한 집합
코드를 만든다 👉 집합의 원소에 숫자를 부여하는 것
- 샘플링(AD 변환): 신호, 음성, 영상
2.4.1 인코드와 디코드
📍 코드
- 유한 개의 원소로 구성된 집합에 대해
각 원소를 서로 구별할 수 있도록 각 원소에 부여하는 숫자
📍 코드 길이의 종류
- 고정 길이 코드: 원소에 부여된 2진수의 길이가 같다.
- 가변 길이 코드: 원소에 부여된 2진수의 길이가 다르다.
📍 동작
- 인코드(encode): 원소 기호 >>> 코드
- 디코드(decode): 코드 >>> 원소 기호 (해독)
📍 코드 예제
{♠️, ♦️, ♥️, ♣️}에 대한 코드
| 집합의 원소 | 코드 1 | 코드 2 | 코드 3 | 코드 4 |
|---|
| ♠️ | 0 | 1 | 00 | 101 |
| ♦️ | 10 | 11 | 01 | 111 |
| ♥️ | 110 | 111 | 10 | 110 |
| ♣️ | 1110 | 1111 | 11 | 000 |
- 집합의 원소들에 숫자를 부여한 것이 코드
♠️♦️♥️♣️ ➡️ 0_10_110_1110 (인코드)
0_10_110_1110 ➡️ ♠️♦️♥️♣️ (디코드)
- 코드 1의 특성: 0을 기준으로 파싱 👉 가변길이 코드
- 코드 2의 특성: 인코드는 가능하지만
111111와 같은 값을 디코딩하는 것은 불가 👉 ❌NG❌
- 코드 3의 특성: 2진수 2자리씩 할당. 디코드 시 2자씩 끊어 읽으면 됨 👉 고정길이 코드
- 코드 4의 특성: 3비트씩 할당. 3비트 고정길이 코드. 비트의 낭비가 발생
📍 고정길이 코드 비트 수
- 집합의 원소 수가 N일 때, 고정길이 코드의 비트 수는? 👉 [log2N]
- 예) 원소 수 10개일 때 [log210] = [3.32192...] = 4
따라서 10개의 원소를 표현하는 최소 비트 수는 4
2.4.2 이진화 십진 코드
- 10진수를 코드로 만든 이진수
- BCD (Binary Coded Decimal)
| 10진수 기호 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|---|
| 8421 BCD 코드 | 0000 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 | 1000 | 1001 |
| 3초과 BCD 코드 | 0011 | 0100 | 0101 | 0110 | 0111 | 1000 | 1001 | 1010 | 1011 | 1100 |
- 3을 0이라 보는 것. 위의 숫자에 +3
- 8421 BCD 코드가 일반적
📍 자보수(self-complementary) 특성
- 보수: 0을 1로, 1을 0ㅇ으로 바꾼 수
- [X + (X의 보수) = 9에 대한 코드]의 특성
- 8421 BCD 코드는 자보수 특성이 없고 3초과 BCD 코드는 자보수 특성이 있다.
📍 예제) (1225)10
- 8421 BCD 코드:
0001 0010 0010 0101
- 3초과 BCD 코드:
0100 0101 0101 1000
📍 예제) 10진수 2에 대한 자보수 특성 확인
- 8421 BCD 코드: ❌
- 3초과 BCD 코드: ⭕️
2.4.3 문자 코드
- ASCII(American Standard Code for Information Interchange)
- 대문자 A 👉 0(디폴트) 100(아스키코드 대문자 A값 1) 0001(아스키코드 대문자 A값 2)
👉 01000001 (16진수로 41)
- "Good " 👉 47 6F 64 64 20(공백)
- 제어용 코드 + 알파벳
📍 패리티 비트
- 아스키 코드에서 원래의 2진수 앞에 들어가는 1자리
- 데이터가 올바른지 검사하기 위해 추가되는 비트
- 짝수 패리티: 1의 개수가 짝수가 되도록 추가하는 비트
- 홀수 패리티: 1의 개수가 홀수가 되도록 추가하는 비트
- 예제 1)
A = (아스키코드) 41 (_100_001)
👉 1의 개수 2개니깐 앞자리엔 0
👉 (짝수) 0100_001 (41) (홀수) 1100_001 (C1)
- 예제 2)
T = (아스키코드) 54 (_101_0100)
👉 (짝수) 1101_0100 (D4) (홀수) 0101_0100 (54)
데이터 검증을 위한 용도로 나중에 자세히
📍 유니코드
- 세계 각국의 언어 표현
- 국제적으로 통용되는 16비트 문자 체계
- 1991년에 버전 1.0, 현재 2018년 11.0
📍 유니코드의 배치
- U+0000 ~ U+007F 영역에 영문자 배치
- 이후 여러 나라 문자
- 한글은 U+AC00부터 U+D7A3까지 11,172글자 정의
- 문서편집기의 문자표에서 유니코드 확인 가능