문제
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