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

C 언어로 10진수를 2진수로 변환하는 방법


문제

C 프로그래밍 언어에서 함수를 사용하여 10진수를 2진수로 어떻게 변환할 수 있을까요?

해결 방법

이 프로그램에서는 main() 함수 안에서 tobinary 함수를 호출하고, 호출된 함수가 실제 변환 작업을 수행합니다.

10진수를 2진수로 변환할 때 사용되는 핵심 로직은 다음과 같습니다.

while(dno != 0){
    rem = dno % 2;
    bno = bno + rem * f;
    f = f * 10;
    dno = dno / 2;
}

이 로직의 원리는 간단합니다. 먼저 10진수를 2로 나눈 나머지(rem)를 구한 뒤, 이 나머지에 자릿값(f)을 곱하여 결과값(bno)에 더합니다. 자릿값은 반복이 진행될 때마다 10배씩 커지고, 입력값(dno)은 2로 나누어 점점 줄어듭니다. 이 과정을 입력값이 0이 될 때까지 반복하면 2진수 형태의 숫자가 완성됩니다.

마지막으로 이 함수는 계산이 끝난 2진수 값을 main 함수로 반환합니다.

예제 1: 10진수 → 2진수 변환

다음은 10진수를 2진수로 변환하는 전체 C 프로그램입니다.

#include<stdio.h>
long tobinary(int);
int main(){
    long bno;
    int dno;
    printf(" Enter any decimal number : ");
    scanf("%d",&dno);
    bno = tobinary(dno);
    printf("\n The Binary value is : %ld\n\n",bno);
    return 0;
}
long tobinary(int dno){
    long bno=0,rem,f=1;
    while(dno != 0){
        rem = dno % 2;
        bno = bno + rem * f;
        f = f * 10;
        dno = dno / 2;
    }
    return bno;
}

실행 결과

위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.

Enter any decimal number: 12
The Binary value is: 1100

이번에는 반대로 2진수를 10진수로 변환하는 방법을 살펴보겠습니다. 2진수의 각 자릿수를 추출한 뒤, 해당 자릿수에 2의 거듭제곱(pow(2, i))을 곱하여 모두 더하는 방식으로 동작합니다.

예제 2: 2진수 → 10진수 변환

다음은 2진수를 10진수로 변환하는 C 프로그램입니다.

#include <stdio.h>
#include <math.h>
int todecimal(long bno);
int main(){
    long bno;
    int dno;
    printf("Enter a binary number: ");
    scanf("%ld", &bno);
    dno=todecimal(bno);
    printf("The decimal value is:%d\n",dno);
    return 0;
}
int todecimal(long bno){
    int dno = 0, i = 0, rem;
    while (bno != 0) {
        rem = bno % 10;
        bno /= 10;
        dno += rem * pow(2, i);
        ++i;
    }
    return dno;
}

참고로 pow() 함수를 사용하기 때문에 math.h 헤더 파일을 반드시 포함해야 하며, 컴파일 시 수학 라이브러리(-lm 옵션)를 함께 링크해야 할 수 있습니다.

실행 결과

위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.

Enter a binary number: 10011
The decimal value is:19