10진 소수를 2진 소수로 변환하는 원리
C 프로그래밍에서 10진 소수를 2진 소수로 변환할 때는 두 가지 방식이 사용됩니다. 정수 부분은 2로 나눈 나머지를 역순으로 모으고, 소수 부분은 2를 곱한 뒤 정수 부분을 순서대로 기록합니다. 아래 예제를 통해 변환 과정을 자세히 살펴보겠습니다.
예제 1: 정수 25를 2진수로 변환
정수는 2로 계속 나누면서 나머지를 기록합니다.
- 1단계 – 25 ÷ 2 → 나머지: 1, 몫: 12
- 2단계 – 12 ÷ 2 → 나머지: 0, 몫: 6
- 3단계 – 6 ÷ 2 → 나머지: 0, 몫: 3
- 4단계 – 3 ÷ 2 → 나머지: 1, 몫: 1
- 5단계 – 1 ÷ 2 → 나머지: 1, 몫: 0
나머지를 아래에서 위로(역순으로) 읽으면 25에 해당하는 2진수는 11001입니다.
예제 2: 소수 0.7을 2진수로 변환
소수 부분은 2를 곱한 결과에서 정수 부분만 차례대로 추출합니다.
- 1단계 – 0.7 × 2 = 1.4, 정수 부분 = 1
- 2단계 – 0.4 × 2 = 0.8, 정수 부분 = 0
- 3단계 – 0.8 × 2 = 1.6, 정수 부분 = 1
- 4단계 – 0.6 × 2 = 1.2, 정수 부분 = 1
- 5단계 – 0.2 × 2 = 0.4, 정수 부분 = 0
- 6단계 – 0.4 × 2 = 0.8, 정수 부분 = 0
정수 부분을 순서대로 읽으면 0.7에 해당하는 2진수는 0.101100입니다.
최종 결과: 25.7의 2진수 값
두 결과를 합치면 10진수 25.7의 2진수 값은 다음과 같습니다.
11001 + 0.101100 = 11001.101100
C 프로그램 코드
다음은 10진 소수를 입력받아 2진 소수로 변환하는 C 프로그램입니다. 정수 부분은 나머지 연산(%)과 나눗셈(/)을 반복하여 처리하고, 소수 부분은 2를 곱하는 과정을 6자리까지 반복합니다.
#include<stdio.h>
int main(){
long double fraDecimal,fraBinary,bFractional = 0.0,dFractional,fraFactor=0.1;
long int dIntegral,bIntegral=0;
long int intFactor=1,remainder,temp,i;
printf("Enter any fractional decimal number: ");
scanf("%Lf",&fraDecimal);
dIntegral = fraDecimal;
dFractional = fraDecimal - dIntegral;
while(dIntegral!=0){
remainder=dIntegral%2;
bIntegral=bIntegral+remainder*intFactor;
dIntegral=dIntegral/2;
intFactor=intFactor*10;
}
for(i=1;i<=6;i++){
dFractional = dFractional * 2;
temp = dFractional;
bFractional = bFractional + fraFactor* temp;
if(temp ==1)
dFractional = dFractional - temp;
fraFactor=fraFactor/10;
}
fraBinary = bIntegral + bFractional;
printf("Equivalent binary value: %lf",fraBinary);
return 0;
}
실행 결과
위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.
Enter any fractional decimal number: 5.7
Equivalent binary value: 101.101100
입력값 5.7에서 정수 부분 5는 2진수 101로, 소수 부분 0.7은 0.101100으로 변환되어 최종적으로 101.101100이 출력되는 것을 확인할 수 있습니다.