실수를 2진수로 변환하기


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) 체계

실수(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)
...

이진 소수 → 십진수 변환