Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++로 이진수와 10진수 상호 변환하기 – 예제 코드로 배우는 진법 변환

컴퓨터 시스템에서 이진수(binary number)는 2진법 체계로 표현되고, 10진수(decimal number)는 10진법 체계로 표현됩니다. 즉, 이진수는 밑(base)이 2인 수이며, 10진수는 밑이 10인 수입니다.

10진수와 이진수의 대응 관계

몇 가지 10진수와 이에 대응하는 이진수의 예는 다음과 같습니다.

10진수이진수
1001010
700111
2511001
1610000

C++ 변환 프로그램 예제

다음은 이진수를 10진수로, 10진수를 이진수로 변환하는 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 BinaryToDecimal(int n) {
    int decimalNumber = 0;
    int base = 1;
    int temp = n;
    while (temp) {
        int lastDigit = temp % 10;
        temp = temp/10;
        decimalNumber += lastDigit*base;
        base = base*2;
    }
    cout<<"Decimal form of "<<n<<" is "<<decimalNumber<<endl;;
}
int main() {
    DecimalToBinary(23);
    BinaryToDecimal(10101);
    return 0;
}

실행 결과

Binary form of 23 is 10111
Decimal form of 10101 is 21

코드 상세 설명

위 프로그램은 DecimalToBinaryBinaryToDecimal이라는 두 개의 함수로 구성되어 있습니다. 전자는 10진수를 이진수로, 후자는 이진수를 10진수로 각각 변환합니다.

1. DecimalToBinary(): 10진수 → 이진수 변환

이 함수에서는 10진수 n의 이진수 값이 배열 binaryNumber[]에 저장됩니다. while 루프가 실행되는 동안 각 반복마다 n을 2로 나눈 나머지(n % 2)가 배열에 차례대로 기록되고, n은 2로 나누어집니다. 해당 로직은 다음 코드 조각과 같습니다.

while (n > 0) {
    binaryNumber[i] = n % 2;
    n = n / 2;
    i++;
}

나머지는 낮은 자리부터 역순으로 저장되기 때문에, 이후 for 루프를 사용해 배열을 거꾸로 출력하면 올바른 이진수를 얻을 수 있습니다.

cout<<"Binary form of "<<num<<" is ";
for (int j = i - 1; j >= 0; j--)
cout << binaryNumber[j];

2. BinaryToDecimal(): 이진수 → 10진수 변환

이 함수에서는 while 루프를 사용해 이진수를 10진수로 변환합니다. lastDigit에는 temp 변수의 마지막 자릿수(비트)가 저장되고, base에는 자릿수가 올라갈 때마다 2배씩 커지는 자릿값(2, 4, 8 등)이 저장됩니다. decimalNumber는 기존 값에 lastDigit × base의 곱을 누적한 합계입니다.

while (temp) {
    int lastDigit = temp % 10;
    temp = temp/10;
    decimalNumber += lastDigit*base;
    base = base*2;
}

3. main() 함수

main() 함수에서는 앞서 정의한 두 함수를 호출하여 실제 변환 작업을 수행합니다.

DecimalToBinary(23);
BinaryToDecimal(10101);

정리하면, 10진수를 이진수로 바꿀 때는 '2로 나눈 나머지'를 반복해서 구하고, 이진수를 10진수로 바꿀 때는 각 비트에 2의 거듭제곱을 곱해 모두 더하는 방식으로 진법 변환을 구현할 수 있습니다.