정보 단위
- bit : 0과 1을 표현할 수 있는 가장 작은 정보 단위
- n비트는 2^n 가지 정보를 표현할 수 있다.
- 1 byte = 8bit
- 1kB = 1,000byte
- 1MB = 1,000kB
- 1GB = 1,000MB
- 1TB = 1,000GB
- 1,024 단위로 다음 단위를 나타내는 것은 잘못된 관습. 현재는 이를 KiB, MiB, GiB 등으로 표현한다.
- word : CPU가 한 번에 처리할 수 있는 데이터 크기
- x86 CPU는 32비트 워드, x64 CPU는 64비트 워드 CPU이다.
- x86계열의 CPU가 32비트까지 나왔고 여기서 64비트를 지원하도록 확장된게 x86-64이다. 그래서 x86-64를 줄여 간단히 x64로 표현하게 되었다. x86은 32비트를, x64는 64비트를 가리키게 되었다.
- x86 CPU는 32비트 워드, x64 CPU는 64비트 워드 CPU이다.
2진법;binary
- 0과 1로만 숫자를 표기하는 방식
8진법, 16진법
- (2) 1010101100
- (8) 1254
- (16) 2AC
위 처럼 16진법을 사용하면 2진수의 표현이 간결해진다. 변환방법 또한 8진법은 3자리, 16진법은 4자리씩 끊어서 변환하면 편하기 때문에 간편한다
실수의 진법변환
10진 소수점수를 2진 소수점수로 변환하는 방법
0.625 * 2 = 1.25 → 1
0.25 * 2 = 0.5 → 0
0.5 * 2 = 1.0 → 1
⇒ 2진 소수점 표현으로 0.625는 0.101 이 된다. (10진수를 n진법으로 변환할 때는 같은 방법으로 n으로 곱해준 후 정수부의 숫자를 하나씩 순서대로 적으면 된다.)
2진 소수점수를 10진 소수점수로 변환하는 방법
0.101 (₂) → 1 * 2^-1 + 0 * 2^-2 + 1 * 2^-3 = 0.5 + 0.125 = 0.625
음수의 2진 표현
2의 보수법
- n의 보수는 더 했을 때 n이 되는 수를 말한다.
0101 (₂) ← 10진수로 5
+1011 (₂) ← 5와 더해서 0이 되는 수는 -5이므로 10진수로 -5가 된다.
=0000 (₂) ← 자리올림이 발생했으나 4bit 크기라서 버려짐, 즉 0이 됨
0000 | 0 |
0001 | 1 |
0010 | 2 |
0011 | 3 |
0100 | 4 |
0101 | 5 |
0110 | 6 |
0111 | 7 |
1000 | -8 |
1001 | -7 |
1010 | -6 |
1011 | -5 |
1100 | -4 |
1101 | -3 |
1110 | -2 |
1111 | -1 |
→ 대부분의 시스템이 2의 보수법으로 부호가 있는 정수를 표현하고 있다.
2의 보수 구하는 간편법 ⇒ 2의 보수 = 1의 보수 + 1
- 1의 보수법은 0을 1로 1을 0으로 바꾸면 된다.
부동소수점(floating point)
- 위 설명처럼 2진법으로도 소수점의 표현이 가능하다.
- 하지만, 위의 방식으로 0.3을 표현하면 0.3 → 0.01001100110011......(0011) 이렇게 무한 반복이 발생한다.
- 이러한 현상을 방지하기 위해 고정소수점 방식과 부동소수점 방식 2가지가 쓰인다.
- 고정 소수점
- 실수 표현에 4byte(32bit)를 사용하고 그 중 부호 1bit, 정수 16bit, 소수 15bit를 사용하도록 약속해 놓은 시스템에 있다고 가정하고 이 규칙으로 7.3을 표현하면 (0)0000000000000111.010011001100110 가 된다.
- 이 때 정수를 표현하는 비트를 늘리면 큰 수를 표현하는 데 유리해지고 소수점이 부정확해진다.
- 반대로 소수를 표현하는 비트를 늘리면 큰 수를 나타낼 수 없게 된다.
- 부동 소수점
- 고정 소수점의 단점을 보완하기 위해 사용되는 방법이다.
- 7.3을 (0)0000000000000111.010011001100110….. 2진수로 표현하고
- 맨 앞의 1바로 뒤에 . 을 찍고 1.11010011001100….. * 2^2 가 된다.
- 이제 이 것을 32bit로 표현하는 방식은 아래와 같다
- Sign(부호) : 0은 양수, 1은 음수
- Exponent(지수) : 8bit로 지수 부분을 나타내게 된다. 이 때 바이어스 표현법을 사용한다. ( 127 + n)
- 바이어스 표현법 : [0000,0000]이 -127을 나타내고, 1 증가한 [0000,0001]은 -126을 나타내며, 이렇게 반복해 모두 1로 채워진 [1111,1111]은 128을 나타내게 된다. 이렇게 표현하는 이유는 0을 부동소수점 방식 2진수로 표현해보면 알 수 있다.
- Mantissa(가수) : 소수점 뒤에 오는 수를 나타낸다.
EX)
19.25를 부동소수점 방식으로 표현
1001.01 (₂)
→ 1.001101 * 2^4 → 지수부분이 4이므로 이진법으로 100(2)
→ 지수를 바이어스법으로 바꾸면 127 + 4 = 131이 되어 10000011(2) 가 된다.
→ 0(부호) 10000011(지수) 00110100000000000000000(가수) 이렇게 표현된다.
0을 부동소수점 방식으로 표현
→ 0은 표현할 수 있는 가장 작은 양수 보다 작거나 같아야 할 것이다. 부동 소수점 표현방식에서 가장 작은 수를 나타내는 방법은 지수부분을 -127(바이어스 표현법으로 0000 0000) 으로 나타내는 방법일 것이다
→ 0 00000000 00000000000000000000000 이렇게 표현할 수 있다. 0을 표현하기위에 모든 비트를 0으로 만들어 default value가 모든 bit가 0이 되도록 하기 위함이다. → 다른 표현법들과의 통일성을 유지하기 위함인듯(잘 이해 안됨…)
(내가 이해한 방식)만약 1.0 을 바이어스 표현법으로 사용하지 않으면 지수부분은 0 이므로 0000 0000 으로 표현되고 가수부분도 0000… 이 된다 → 이런 경우 0을 부동소수점으로 표현하기 어렵게 된다. 0은 2진수로 0000 0000 0000.. 이므로 소수점을 찍을 공간도 없고, 지수를 씌울 수도 없는 수이기 때문에 모든 비트가 0 으로 표현되면 0을 나타내도록 바이어스 표현법을 사용하는 게 아닐까?
- 또한, 지수부에 또 다른 부호비트 없이 음수값을 나타내기 위해 사용하는 이유도 있다. 이렇게 하면 양수 하나를 더 표현할 수 있다는 장점이 있다.
문자를 표현하는 법
- Character Set : 컴퓨터가 인시하고 표현할 수 있는 문자의 모음
- 2진수를 문자로 : Character Encoding
- 문자를 2진수로 : Character Decoding
아스키 코드
- 8비트로 표현 → 패리티 비트(오류 검출용)를 제외한 7비트로 표현 → 128개가 한계
EUC-KR
- 완성형 인코딩 방식 : 하나의 전체 글자에 고유한 코드 부여 → 2,350개 정도의 한글만 표현 가능..
UNICODE와 UTF-8
- 유니코드는 문자집합
- UTF-XX는 인코딩하는 방법
UTF-8
- 1~4 byte의 문자 인코딩 결과를 만들어낸다 → 유니코드 문자에 부여된 값의 범위에 따라 각 글자의 byte가 결정된다.
- 한 - D55C(16) ,글 - AE00(16) → 16진수로 0800(16) ~ FFFF(16)사이에 있음 → 3byte로 인코딩될 것이라는 것을 알 수 있음
'Computer Science > Computer Architecture' 카테고리의 다른 글
1. 컴퓨터 구조를 공부하는 이유 (0) | 2023.11.16 |
---|