이 글은 한빛미디어 출판사의 '혼자 공부하는 컴퓨터 구조+운영체제(강민철 저)'를 정리한 내용입니다.
1. 컴퓨터가 표현하는 정보 단위
1-1. 비트
컴퓨터는 0 또는 1밖에 이해하지 못한다.
-> 0과 1을 나타내는 가장 작은 정보 단위 '비트'
- 1비트는 0 또는 1 두 가지 정보를 표현할 수 있다.
- n비트는 2의 n제곱 가지의 정보를 표현할 수 있다.
1-2. 바이트
여덟 개의 비트를 묶은 단위로 비트보다 한 단계 큰 단위이다.
- 1바이트는 8비트이니, 2의 8제곱(256)개의 정보를 표현할 수 있다
바이트는 아래와 같이 더 큰 단위로 묶을 수 있다.
1byte == 8bit
1KB == 1,000byte
1MB == 1,000KB
1GB == 1,000MB
1TB == 1,000GB
1-3. 워드(word)
CPU가 한 번에 처리할 수 있는 데이터 크기
ex) 1워드가 16비트라면 CPU가 한 번에 16비트를 처리할 수 있는 것이고,
1워드가 32비트라면 CPU가 한 번에 32비트를 처리할 수 있는 것.
- 하프 워드(half word): 워드의 절반 크기
- 풀 워드(full word): 워드의 1배 크기
- 더블 워드(double word): 워드의 2배 크기
- 현대 컴퓨터의 워드 크기는 대부분 32비트 또는 64비트
ex) 인텔의 x86 CPU는 32비트 워드 CPU,
인텔의 x64 CPU는 64비트 워드 CPU
2. 이진법
0과 1만으로 모든 숫자를 표현하는 방법
- 숫자가 1을 넘어가는 시점에 자리 올림을 한다
- 십진법은 9를 넘어가는 시점에 자리 올림을 하는 것
2-1. 이진수
십진수 1 -> 이진수 1
십진수 2 -> 이진수 10
십진수 3 -> 이진수 11
십진수 4 -> 이진수 100
십진수 5 -> 이진수 101
십진수 6 -> 이진수 110
십진수 7 -> 이진수 111
십진수 8 -> 이진수 1000
십진수 9 -> 이진수 1001
.
.
.
2-2. 이진수 표기
'10'이라는 숫자는 십진수 10일까 이진수 2일까? 이런 혼동을 방지하기 위해
이진수는 아래 첨자로 '10(2)'라고 표기하거나 '0b10'처럼 숫자 앞에 '0b'를 붙여 표기한다.
2-3. 이진수의 음수 표현
0과 1만으로 음수를 표현하는 방법 중 가장 널리 사용되는 방법은 '2의 보수'로 표현하는 방법이다.
- 2의 보수: 어떤 수를 그보다 큰 2의 n제곱에서 뺀 값
- 그러나 실제로는 이진수의 모든 0과 1을 뒤집고, 거기에 1을 더한 값으로 생각하면 된다
ex) 0b11의 모든 0과 1을 뒤집으면 0b00이고, 여기에 1을 더하면 0b01이다.
즉, 0b11의 2의 보수는 0b01이다.
- 2의 보수로 표현된 값의 원본을 알고싶다면 한 번 더 2의 보수를 구하면 된다.
ex) 0b11의 2의 보수인 0b01에서 한 번 더 2의 보수를 구하면 0b10 -> 0b11로 원본값을 알 수 있다.
2-4. 이진수의 음수와 양수를 구별하는 방법
0b11만 보고는 음수인지 양수인지 구별하기 어렵다. 따라서 컴퓨터 내부에서는 이를 구별하기 위해 '플래그(flag)'를 사용한다.
- 컴퓨터 내부에서 어떤 값을 다룰 때 부가 정보가 필요한 경우 플래그를 사용
- 컴퓨터 내부에서 숫자들은 '양수' 혹은 '음수'가 적힌 표시를 들고 다니므로 컴퓨터가 부호를 헷갈릴 일은 없다
2-5. 2의 보수 표현의 한계
- 2의 보수 방법은 음수를 널리 사용되는 음수 표현 방식이지만 완벽한 방식은 아니다
- 0이나 2의 n제곱 형태의 이진수에 2의 보수를 취하면 원하는 값을 얻을 수 없다
ex1) 0b0000에 2의 보수를 취하면 0b0000 -> 0b1111 -> 0b10000 -> 0b0000(자리 올림 발생한 비트를 버림)
다시 자기 자신이 되는 상황이 생긴다.
ex2) 0b1000에 2의 보수를 취하면 0b0111 -> 0b1000 다시 자기 자신이 된다.
출처 - '혼자 공부하는 컴퓨터 구조+운영체제(강민철 저, 한빛미디어)'