C언어에서 10진수를 2진수로 변환하는 방법

10진수와 2진수 변환 원리

10진수 정수를 2진수로 변환할 때는 '2로 나누어 나머지를 기록하고 역순으로 배열'하는 방법을 사용합니다. 변환 과정은 다음과 같습니다:

  1. 10진수를 2로 나누어 몫과 나머지를 구합니다
  2. 몫이 0이 될 때까지 계속 2로 나눕니다
  3. 구해진 나머지들을 역순으로 결합합니다

예를 들어, 10진수 17을 2진수로 변환하는 과정:

17 ÷ 2 = 8 ... 1
8 ÷ 2 = 4 ... 0
4 ÷ 2 = 2 ... 0
2 ÷ 2 = 1 ... 0
1 ÷ 2 = 0 ... 1

나머지를 역순으로 읽으면: 10001 (2진수)

C 언어 구현 예제

방법 1: 배열을 이용한 변환

#include <stdio.h>

void convertToBinaryArray(int num) {
    int bits[32];
    int index = 0;
    
    if(num == 0) {
        printf("2진수: 0\n");
        return;
    }
    
    while(num > 0) {
        bits[index++] = num % 2;
        num /= 2;
    }
    
    printf("2진수: ");
    for(int i = index - 1; i >= 0; i--) {
        printf("%d", bits[i]);
    }
    printf("\n");
}

방법 2: 비트 연산을 이용한 변환

void convertToBinaryBitwise(int num) {
    unsigned int mask = 1u << 31;
    int started = 0;
    
    printf("2진수: ");
    
    if(num == 0) {
        printf("0\n");
        return;
    }
    
    while(mask > 0) {
        if(num & mask) {
            printf("1");
            started = 1;
        } else if(started) {
            printf("0");
        }
        mask >>= 1;
    }
    printf("\n");
}

방법 3: 재귀 함수를 이용한 변환

void convertToBinaryRecursive(int num) {
    if(num > 1) {
        convertToBinaryRecursive(num / 2);
    }
    printf("%d", num % 2);
}

메인 함수

int main() {
    int input;
    
    printf("10진수 정수를 입력하세요: ");
    scanf("%d", &input);
    
    printf("\n변환 결과:\n");
    
    printf("배열 방식: ");
    convertToBinaryArray(input);
    
    printf("비트 연산: ");
    convertToBinaryBitwise(input);
    
    printf("재귀 방식: ");
    if(input == 0) {
        printf("0");
    } else {
        convertToBinaryRecursive(input);
    }
    printf("\n");
    
    return 0;
}

실행 예시

10진수 정수를 입력하세요: 25

변환 결과:
배열 방식: 2진수: 11001
비트 연산: 2진수: 11001
재귀 방식: 11001

주의사항

  • 음수는 2의 보수 표현으로 변환해야 합니다
  • 변환 가능한 최대값은 사용하는 데이터 타입에 따라 다릅니다
  • 비트 연산 방식은 32비트 정수를 기준으로 합니다

태그: C언어 비트연산 재귀함수 진법변환 2진수

8월 21일 13:51에 게시됨