2진수는 0과 1, 두 개의 숫자만을 사용하여 정보를 표현하는 방법이다. 컴퓨터는 내부적으로 2진수를 이용하여 데이터를 저장하고 처리한다. 비트(bit)는 binary digit의 줄임말로 이진 숫자 체계의 기본 단위이다. 각 비트는 0 또는 1의 값을 가질 수 있다.
일상 생활에서 사용하는 10진수 숫자 100을 2진수로 변환하려면, 몫이 0이 될 때까지 2로 나누고, 마지막에 나온 나머지부터(역순으로) 나열하면 된다.
100 / 2 = 50 (나머지 0)
50 / 2 = 25 (나머지 0)
25 / 2 = 12 (나머지 1)
12 / 2 = 6 (나머지 0)
6 / 2 = 3 (나머지 0)
3 / 2 = 1 (나머지 1)
1 / 2 = 0 (나머지 1)
---------------------
= 1100100
정수는 위처럼 간단하게 변환할 수 있지만, 0.5, 0.33 같은 실수를 변환하려면 더 복잡한 과정이 필요하다.
실수(Real Number) 체계
예를들어 10진수 68.625를 2진수로 변환하려면 숫자를 정수부와 소수부로 분리해야 한다. 10진수 68.625의 정수부는 68, 소수부는 0.625다. 정수부는 위와 동일한 방법으로 2진수로 변환할 수 있다.
68 / 2 = 34 (나머지 0)
34 / 2 = 17 (나머지 0)
17 / 2 = 8 (나머지 1)
8 / 2 = 4 (나머지 0)
4 / 2 = 2 (나머지 0)
2 / 2 = 1 (나머지 0)
1 / 2 = 0 (나머지 1)
--------------------
1000100
소수부를 2진수로 변환하려면 2를 곱한 후 그 결과의 정수부를 기록하고, 소수부만 가져와서 다시 2를 곱해준다. 이 과정을 계산 결과가 1이 되거나(소수부 0), 똑같은 소수부가 나올 때까지 반복하고, 기록된 정수부를 처음부터 나열하면 된다.
0.625 × 2 = 1.25 (정수부 1 기록, 소수부 0.25 사용)
0.25 × 2 = 0.5 (정수부 0 기록, 소수부 0.5 사용)
0.5 × 2 = 1 (정수부 1 기록)
-----------------
101
이제 정수부와 소수부를 합치면 10진수 68.625에 대한 2진수 변환이 완료된다.
정수부 68의 2진수: 1000100
소수부 0.625의 2진수: 101
-----------------------
1000100.101
0.3 같은 소수를 2진수로 변환해보면 $0.01001100110011001\cdots$ 이렇게 일정한 패턴(1001)이 계속 반복되는데 이러한 숫자는 무한히 반복되는 이진 소수라고 부른다. 이러한 무한 소수는 소수점 아래의 숫자가 끝 없이 반복되므로 정확한 2진수 표현을 갖지 않는다. 컴퓨터는 이러한 유형의 소수를 정확하게 표현하거나 계산할 수 없기 때문에 근사값을 사용해서 표현한다.
0.3 × 2 = 0.6 (0)
0.6 × 2 = 1.2 (1)
0.2 × 2 = 0.4 (0)
0.4 × 2 = 0.8 (0)
0.8 × 2 = 1.6 (1)
0.6 × 2 = 1.2 (1)
0.2 × 2 = 0.4 (0)
0.4 × 2 = 0.8 (0)
0.8 × 2 = 1.6 (1)
0.6 × 2 = 1.2 (1)
0.2 × 2 = 0.4 (0)
...