전체 변환 코드를 binarytodecimal()이라는 단일 프로시저로 묶었다는 점을 제외하면 모든 것이 이전 방법과 동일합니다.
방법 3: char 배열을 사용하여 이진수 저장
이전에 논의된 모든 방법에서 주요 문제는 정수의 크기입니다. 정수 인코딩으로 이진수를 저장하고 있었습니다.
따라서 16비트 컴파일러의 경우 제공할 수 있는 가장 큰 숫자는 111111입니다.
정수 크기가 더 큰 32비트 및 64비트 컴파일러는 확실히 입력 범위를 늘리고 문제를 해결할 것입니다. 그러나이 문제는 이전 버전에서 우리를 놀라게 할 것입니다.
다행스럽게도 문제를 해결하기 위한 핵이 있습니다. 즉, 동적 char 배열을 사용하여 정수 변수 대신 이진수를 저장합니다. 전략을 이해하기 위해 다음 코드를 살펴보겠습니다.
#include<conio.h>#include<math.h>#include<stdio.h>#include<stdlib.h>intmain() {
long decimal =0;
int size;
printf("\nEnter maximum number of digits in your Binary number: ");
scanf("%d", &size);
char* BinaryArr = (char*)malloc(size +1);
printf("Please Enter your Binary Number: ");
scanf("%s", BinaryArr);
char ch;
for (int i = size -1, j =0; i >=0; i--, j++) {
ch = BinaryArr[i];
decimal += atoi(&ch) * (int)pow(2, j);
}
printf("The equivalent decimal number is: %d", decimal);
return0;
}
먼저 사용자에게 동등한 10진수로 변환하려는 이진수의 크기를 확인하도록 요청합니다.
이진수의 크기를 알고 있는 경우 malloc() 함수를 사용하여 해당 크기의 배열을 동적으로 할당합니다. malloc()은 stdlib.h에 정의되어 있으며 동적 메모리를 바이트 단위로 할당합니다.
문자 배열로 만들기 위해 malloc()의 반환 포인터를 char* 유형으로 명시적으로 유형 변환했습니다.
참고: malloc(size +1)의 추가 1은 끝에 \0 문자를 저장할 공간이 필요하기 때문입니다.
다음으로 문자 포인터 BinaryArr가 가리키는 문자 배열의 입력으로 이진수를 사용합니다.
그런 다음 마지막 인덱스(즉, 이진수의 최하위 비트)에서 이 문자 배열을 반복하기 시작하고 각 반복 후 인덱스 0에 가까워지는 이진 문자를 하나씩 가져옵니다.
각 반복에서 i^th^ 인덱스를 보조 ch 변수에 저장합니다. 그런 다음 atoi() 함수를 적용하여 동등한 정수 값을 얻습니다.
그런 다음 이 기사의 시작 부분에서 논의한 공식에 모든 것을 넣습니다.
마지막으로 루프가 종료되자마자 최종 10진수 값을 인쇄합니다. 출력 콘솔에서 어떻게 느껴지는지 봅시다.