10진수를 2진수로 변환하는 방법은 여러 가지입니다. 1. 비트 연산을 이용한 방법 위 세 가지 방법을 제공합니다. 난이도: 배열 > 비트 > 재귀 1. 비트 연산을 이용한 방법 // 10진수 -> 2진수 변환 (반복적 버전: 비트) void ten_to_two(unsigned n) { unsigned a = 0x80000000; // 1000 0000 0000 0000 0000 0000 0000 0000(2) <약 21억> for (int i = 0; i < 32; i++) { if ((a & n) == a) printf("1"); else printf("0"); a >>= 1; } } a와 n(사용자가 입력한 값)을 and연산해봅시다! 1000 0000 …. 과 1010(n)이랑 and연산하면 그럼 언제 1이 나올까요? 같은 이치로 그럼 결국 0000….1010이 나오게 됩니다! a를 오른쪽으로 시프트했을 때, a의 1의 자리와 n의 1의 자리가 같으면 2. 배열을 이용한 방법 // 10진수 -> 2진수 변환 (반복적 버전: 배열) void ten_to_two_2(unsigned n) { // 동적 배열 생성 int size = 1; int *a = (int*)calloc(sizeof(int)*size); // 배열에 원소 넣기 ex) 11 => 1 1 0 1 (2로 나누고 나머지 값) for (int i = 0; n != 0; i++) { a[i] = n % 2; n /= 2; if (n != 0) { size++; a = realloc(a, sizeof(int)*size); } } // 배열 원소 거꾸로 출력 for (int i = size - 1; i >= 0; i--) { printf("%d", a[i]); } free(a); } 위 방법은 일상생활에서 10진수를 2진수로 바꾸는 방법입니다. 11에서 2를 나누면 -> 5…1 위 수식에서 나온 나머지를 거꾸로 쓰면 ‘1011’이고 이는 11의 2진수입니다. 위 방법을 그대로 C언어로 적용하였습니다. 3. 재귀를 이용한 방법 // 10진수 -> 2진수 변환 (재귀적 버전) void ten_to_two_j(unsigned n) { if (n < 2) { // n==1 (이전 n이 2이거나 3) printf("%d", n); } else { ten_to_two_j(n / 2); printf("%d", n % 2); } } 위는 배열을 이용한 방법과 거의 유사합니다. 로직은 아래 그림을 참고해주세요!! 재귀를 이용하면 별도의 작업없이 – Main 함수 및 실행 int main() { unsigned num = 0; printf("-1 입력시 종료됩니다.\n\n"); while (num != -1) { printf("숫자를 입력하세요 \n(4294967295까지 처리 가능): "); scanf_s("%u", &num); printf("\n반복적 버전 : 비트\n"); ten_to_two(num); // 반복적 버전 : 비트 printf("\n\n반복적 버전 : 배열\n"); ten_to_two_2(num); // 반복적 버전 : 배열 printf("\n\n재귀적 버전\n"); ten_to_two_j(num); // 재귀적 버전 printf("\n\n"); } return 0; }Unsigned Max값과 -1은 컴퓨터 입장에서 같습니다! C언어 – 2진수를 10진수로 변환하자! 오늘은 C언어에서 2진수를 10진수로 바꾸는 소스코드를 작성해 보도록 하겠습니다. 실행하면 아래와 같이 출력됩니다. 소스는 아래와 같습니다. #include <stdio.h> int main(void) { int binary, copy, result = 0, temp = 1; // 2진수를 입력합니다. printf("2진수 입력 : "); scanf_s("%d", &binary); copy = binary; // 입력한 수가 0이 아닐 때 while (copy!=0) { if (copy % 10) result += temp; copy /= 10; temp *= 2; } // 결과 출력 printf("이진수 %d는 십진수 %d입니다.\n", binary, result); } [관련글 더 보기] - [컴퓨터 이야기] 진수와 수의 표현 - 10진수를 다른 진수(2진수,8진수 등)로 변환하는 소스 - [C언어 소스] 가장 간단한 2진수 출력 소스 - [프로그래밍 문제] 재귀를 이용해서 10진수를 2진수로 바꾸기 - [C언어 소스] 10진수를 2진수로 변환하는 소스 |