C언어 – 2진수를 10진수로 변환하자!

#include <stdio.h>

// 2진수 -> 10진수 변환 (반복적 버전: 배열)
void two_to_ten(unsigned n) {

	// 동적 배열 생성 
	int size = 1;
	int *a = (int*)calloc(sizeof(int)*size);

	// 배열에 원소 넣기 ex) 123 => 3 2 1 
	for (int i = 0; n != 0; i++) {
		a[i] = n % 10;
		n /= 10;
		if (n != 0) {
			size++;
			a = realloc(a, sizeof(int)*size);
		}
	}

	// sum에 (배열 원소*2^i) 더해서 출력 
	unsigned sum = 0;
	unsigned b = 1;
	for (int i = 0; i < size; i++) {
		sum = sum + (a[i] * b);
		b = b * 2;
	}
	printf("%u ", sum);
	free(a);
}

int main() {
	unsigned num = 0;

	printf("-1 입력시 종료됩니다.\n\n");

	while (num != -1)
	{
		printf("이진수를 입력하세요 \n(1111111111까지 처리 가능): ");
		scanf_s("%u", &num);

		printf("\n\n반복적 버전 : 배열\n");
		two_to_ten(num); //	반복적 버전 : 배열

		printf("\n\n");
	}
	return 0;
}

2진수를 10진수로 변환하기 위해서 먼저 비트별로 배열에 값을 저장했습니다.
ex) 1011 -> a[0]=1, a[1]=1, a[2]=0, a[3]=1 (거꾸로 저장)

위는 n(사용자 입력 값)을 10으로 나눈 나머지를 배열 원소에 저장하고.
n은 10으로 나눈 몫으로 갱신하는 작업을 반복하면 해결됩니다!
(n!=0)

2진수를 10진수로 바꾸는 일상적인 방법은 각 비트에 2를 곱하는 것입니다.
첫 번째 비트는 2^0을 곱하고,
n번째 비트는 2^(n-1)을 곱합니다!
모든 비트에 다 곱했으면 이를 다 더하면 완성입니다!

결국 (1*2^0) + (1*2^1) + (0*2^2) + (1*2^3) = 11이 됩니다!!

C언어 – 10진수를 2진수로 변환하자!

Leave a Reply

Your email address will not be published. Required fields are marked *