10진수를 2진수로 변환하기

정수부

우리는 일상생활에서 보통 10진수를 사용합니다. 반면에 컴퓨터는 모든 정보를 0과 1로 이루어진 비트의 형태로 저장합니다. 즉, 모든 걸 2진수로 저장한다는 소리입니다. 그만큼 2진수와 10진수 간 변환이 잦으며, 반드시 알아야 할 내용 중 하나입니다. 이 글에서는 서로 변환하는 방법을 알아보도록 하겠습니다.

10진법(decimal system)
한 자리의 수가 10이 될 때마다 자리올림을 하여 표시하는 방법을 10진법이라 합니다. 따라서 10진법으로 수를 표시할 때에는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9의 10가지 숫자를 필요로 합니다.

10진수를 2진수로 바꾸는 방법은 다음과 같습니다. 아래와 같이 바꾸고 싶은 진수의 수로 더 이상 나눌 수 없을 때까지 나눈 뒤에 역순으로 읽습니다. 나눌 때 몫을 아래에 적고 나머지는 옆에다 적습니다.

이번에는 614를 2진수로 바꿔보도록 하겠습니다. 변환하고 싶은 수를 넘지 않는 범위 내에서 가장 큰 2의 거듭제곱 수를 뺍니다. 나온 결괏값에서 동일한 과정을 반복하고, 중간에 선택한 2의 거듭제곱 수와 대응되는 자리에는 1을 쓰고 나머지 자리에는 0을 씁니다.

소수부

만약에, 37.1875라는 수가 있으면 정수부인 37과 소수부인 0.1875로 나누어 생각해 볼 수 있습니다. 정수부는 위에서 변환했던 대로 변환하시면 되고, 소수부는 정수부와 비슷하지만 조금 다른 방법으로 변환합니다. 바로 소수점 이하가 0이 될 때까지 바꾸고 싶은 진수의 수로 계속 곱해 주면서, 정수 부분을 따로 취해 차례대로 읽어주시면 됩니다.

37을 2진수로 변환하면 \(100101_{(2)}\)이 되니, 37.1875를 2진수로 변환하면 둘을 합쳐서 \(100101.0011_{(2)}\)이 됩니다. 그럼 이번에는 0.1을 2진수로 변환해볼까요?

소수점 이하가 0이 되지 않고 일정 부분에서 순환 마디가 계속해서 반복되는 걸 볼 수 있는데 이를 순환소수로 나타내면 \(0.0\overline{0011}\)로 표시할 수 있습니다. 하지만 컴퓨터에선 이렇게 순환 마디 위에 선을 그어서 나타내지 않고 고정된 비트 수로 나타내야 합니다.

여기에서 이 주제를 다루기에는 내용이 너무 길어지니, 컴퓨터가 소수를 나타내는 방법에 관해 자세히 알고 싶으시면 '번외. IEEE 754'를 확인해보시기 바랍니다.

2진수를 10진수로 변환하기

정수부

이번에는 2진수를 10진수로 변환해보도록 하겠습니다. 2진수의 숫자만큼 오른쪽에서 왼쪽으로 2의 제곱수를 쓰고, 2진수의 각 자리와 2의 제곱수를 서로 곱해준 뒤 모두 더하면 됩니다. 이 방법으로 \(110110_{(2)}\)를 10진수로 변환한다면 아래와 같을 것입니다.

소수부

정수부는 위에서 했던 것과 마찬가지로 똑같은 과정을 반복해주시면 됩니다. 이번에는 \(10110.11101_{(2)}\)를 10진수로 변환해보도록 하겠습니다.