컴퓨터 내부의 데이터 표현 - 컴퓨터에서 사용하는 수와 진법
정기철 저자의 '프로그래밍 관점에서 바라보는 컴퓨터 구조' 책을 정리하였습니다.
컴퓨터 내부에서는 원천적으로 정확한 숫자의 표현이 불가하다.
그렇지만 우리는 컴퓨터를 잘 활용하고 있다.
이번 챕터에서는 컴퓨터가 정확한 숫자의 표현이 불가함에도,
컴퓨터를 잘 활용할 수 있는 방법과 이유에 대해서 알아보고자 한다.
1. 컴퓨터에서 사용하는 수
컴퓨터에서 정보를 표현하는 기본 단위 중,
비트(bit)는 정보 저장과 표현의 기본 단위이다.
한 비트에 0과 1이 들어갈 수 있고, 따라서 1비트를 활용하여
2^1 개의 정보를 표현할 수 있다.
8개의 비트가 모인 것을 바이트(byte)라 표현하며,
영문과 숫자는 보통 1바이트로 표현되지만 한글의 경우 1글자당 2바이트로 표현된다.
바이트의 단위가 커지면 표현법이 달라지는데,
1KB(=2^10 byte) - 1MB(=2^20byte) - 1GB(=2^30byte) - 1TB(=2^40byte) - 1PB(=2^50byte) - 1EB(=2^60byte)
순으로 표현된다.
4바이트(=32bit)가 모인 것을 워드(word)라 표현하는데,
컴퓨터에서는 워드 단위로 주소를 지정할 수 있다고 한다.
즉, CPU에서 메인 메모리에 보내는 주소가 워드 단위로 지정된다.
2. 진법
진법 시스템은 숫자를 표현하는 가장 효과적인 표현 방법이다.
진법 시스템이 존재하지 않는다면,
모든 수를 표현하는 데 각기 다른 기호를 사용해야 하며
이를 기억하기란 쉽지 않을 것이다.
10진법이란 0부터 9까지 10개의 숫자를 이용하여 무한 개의 숫자를 표현하는 방법을 말한다.
2진법이란 0과 1 두 개의 숫자를 이용하여 무한 개의 숫자를 표현하는 방식인데,
컴퓨터에서는 2진법을 활용하여 정보를 표현한다.
(전기 회로에 전류가 흐르지 않을 때를 0으로 흐를 때를 1로 표현한다.)
10진법에서 432의 의미를 파악해보자.
432에서 숫자 '4'는,
1) 100의 자리가 4개
2) 100으로 나누었을 때의 몫
을 의미한다.
432에서 숫자 '32'는 100으로 나누었을 때의 나머지이며,
숫자 '2'는 10으로 1번 나누었을 때의 나머지를 의미한다.
2,8,10,16 진법 사이의 관계에 대해 알아보자.
각 진법은 진법 앞에 표현된 수를 기본 단위로 하여
그 수의 지수 승으로 자릿수를 올려 표현하는 방법이다.
2진법을 예로 들면, 맨 마지막 자릿수가 2을 넘기면
그 다음 자릿수로 1이 채워지는 방식이다.
2진법으로 숫자를 표현하면
사람이 읽기에 불편하기도 하고, 자릿수가 너무 많아지기 때문에
16진법을 사용하기도 한다.
16진법에서는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F
16개의 기호를 사용하여 숫자를 표현한다.
이와 마찬가지로 8진법에서는 0, 1, 2, 3, 4, 5, 6, 7
8개의 기호를 사용하여 숫자를 표현한다.
2진법에서 8진법으로 바꾸려면 오른쪽을 기점으로 3비트씩 모아서
계산한 수로 8진법의 각 자릿수를 표현하고,
(8이 2의 3제곱을 의미하므로, 이와 연결시켜 생각하면 될 듯 하다.)
예) 10 010 111 -> 2^1*1+2^0*0 2^2*0+2^1*1+2^0*0 2^2*1+2^1*1+2^0*1 -> 227(8)
2진법에서 16진법으로 바꾸려면 오른쪽을 기점으로 4비트씩 모아서
계산한 수로 16진법의 각 자릿수를 표현하면 된다.
예) 1001 0111 -> 2^3*1+2^0*1 2^2*1+2^1*1+2^0*1 -> 97(16)