개요
이 글에서는 정수를 10진법(base-10)에서 2진법(base-2)으로 변환하는 방법을 다룹니다. 정수의 크기는 32비트로 가정하며, 변환은 숫자를 진법의 밑값(base)으로 반복해서 나누는 방식으로 수행됩니다. 컴퓨터는 이러한 과정을 통해 정수 값을 바이트 단위로 변환하여 처리합니다.
입력: 10 출력: 1010
변환 원리 설명
10진수 10을 2진수로 변환하는 과정을 단계별로 살펴보겠습니다.
10을 2로 나누면 몫은 5, 나머지는 0입니다. 첫 번째 자리는 0입니다.
몫인 5를 다시 2로 나누면 몫은 2, 나머지는 1입니다. 두 번째 자리는 1입니다.
2를 2로 나누면 몫은 1, 나머지는 0입니다. 세 번째 자리는 0입니다.
1을 2로 나누면 몫은 0, 나머지는 1입니다. 네 번째 자리는 1입니다.
숫자가 0이 되면 반복을 종료하고, 지금까지 구한 나머지들을 역순으로 출력합니다.
따라서 10진수 10에 해당하는 2진수는 1010입니다.
C 코드 예제
#include <iostream>
using namespace std;
int main() {
long n, d, r, binary = 0;
n = 10;
d = n;
int temp = 1;
while (n != 0) {
r = n % 2; // 나머지 구하기
n = n / 2; // 몫으로 갱신
binary = binary + r * temp; // 자릿수 누적
temp = temp * 10; // 자릿수 이동
}
printf("%ld", binary);
return 0;
}코드 동작 설명
r = n % 2;: 현재 숫자를 2로 나눈 나머지(0 또는 1)를 구합니다.n = n / 2;: 몫을 새로운 값으로 사용하여 다음 반복을 준비합니다.binary = binary + r * temp;: 구한 나머지를 자릿수에 맞게 결과 변수에 누적합니다.temp = temp * 10;: 다음 반복에서 한 자리씩 왼쪽으로 이동하기 위해 temp를 10배 증가시킵니다.
이 알고리즘은 나눗셈과 나머지 연산만을 활용하므로 시간 복잡도는 O(log n)이며, 입력된 10진수를 손쉽게 2진수 형태로 출력할 수 있습니다.