컴퓨터 시스템에서 2진수는 2진 기수법(base 2)으로 표현되고, 10진수는 10진 기수법(base 10)으로 표현됩니다. 즉, 2진수는 0과 1 두 개의 숫자만 사용하는 반면, 10진수는 0부터 9까지의 숫자를 사용합니다.
대표적인 10진수와 이에 대응하는 2진수의 예는 다음과 같습니다.
| 10진수 | 2진수 |
|---|---|
| 15 | 01111 |
| 10 | 01010 |
| 18 | 10010 |
| 27 | 11011 |
10진수 → 2진수 변환 원리
10진수를 2진수로 변환하는 가장 일반적인 방법은 2로 나눈 나머지를 반복적으로 구하는 것입니다. 수를 2로 계속 나누면서 각 단계에서의 나머지(0 또는 1)를 기록하고, 마지막에 나머지들을 역순으로 나열하면 해당 수의 2진 표현이 완성됩니다.
이 과정을 구현한 C++ 프로그램은 다음과 같습니다.
예제 코드
#include <iostream>
using namespace std;
void DecimalToBinary(int n) {
int binaryNumber[100], num=n;
int i = 0;
while (n > 0) {
binaryNumber[i] = n % 2;
n = n / 2;
i++;
}
cout<<"Binary form of "<<num<<" is ";
for (int j = i - 1; j >= 0; j--)
cout << binaryNumber[j];
cout<<endl;
}
int main() {
DecimalToBinary(15);
DecimalToBinary(10);
DecimalToBinary(18);
DecimalToBinary(27);
return 0;
}실행 결과
Binary form of 15 is 1111 Binary form of 10 is 1010 Binary form of 18 is 10010 Binary form of 27 is 11011
코드 동작 방식
위 프로그램에서 DecimalToBinary() 함수는 매개변수로 전달받은 10진수 n의 2진 값을 배열 binaryNumber[]에 저장합니다. while 루프가 반복될 때마다 n % 2(n을 2로 나눈 나머지)의 결과가 배열에 차례대로 저장되고, n은 n / 2로 점점 작아집니다.
이 과정을 보여주는 핵심 코드는 다음과 같습니다.
while (n > 0) {
binaryNumber[i] = n % 2;
n = n / 2;
i++;
}나머지는 낮은 자릿수부터 역순으로 저장되므로, 이후 for 루프를 사용해 배열을 뒤에서부터 앞으로 순회하며 올바른 순서의 2진수를 출력합니다.
cout<<"Binary form of "<<num<<" is "; for (int j = i - 1; j >= 0; j--) cout << binaryNumber[j];
main() 함수에는 다양한 10진수 값에 대해 DecimalToBinary()를 호출하는 코드만 포함되어 있습니다.
DecimalToBinary(15); DecimalToBinary(10); DecimalToBinary(18); DecimalToBinary(27);
정리
이 프로그램의 핵심은 세 가지입니다. 첫째, 2로 나눈 나머지를 통해 각 자리의 비트 값을 구하고, 둘째, 몫이 0이 될 때까지 반복하며, 셋째, 저장된 값을 역순으로 출력해 최종 2진수를 얻는 것입니다. 이 방식은 어떤 10진수든 손쉽게 2진수로 변환할 수 있는 기본적이면서도 효율적인 알고리즘입니다.