본문 바로가기

프로그램언어/C언어

c언어 10진수를 2진수로 변환

10진수를 2진수로 변환하려면 10진수를 2로 나누어 나머지를 구한 후 저장하고, 다시 몫을 2로 나누어 나머지를 구한 다음 저장하는 과정을 반복하다가 몫이 0이면 나머지를 저장하고 반복을 종료하여 나머지를 거꾸로 출력하면 2진수가 출력됩니다.

 

10진수 25를 2진수로 변환하는 과정을 그림으로 그려보면 아래 그림과 같습니다.

 

 

10진수를 입력 받아 2진수로 변환하는 프로그램을 작성하시오. (단 100이하의 정수를 입력 하시오.)

 

소스 코드 실행 결과
#include <stdio.h>

int main(void)
{
    int n, c = 0, mok, nmg, i;
    int arr[10];

    printf("100이하의 정수 입력 : ");
    scanf("%d", &n);

    do
    {
        mok = n / 2;
        nmg = n - mok * 2;
        arr[c++] = nmg;
        n = mok;
    } while (mok != 0);

    for (i = c - 1; i >= 0; i--)
    printf("%d", arr[i]);

    return 0;
}

결과1]

100이하의 정수 입력 : 

25

11001

 

 

 

결과2]

100이하의 정수 입력 : 100
1100100

 

위 방법은 수학적인 방법으로 2진수를 출력한 것입니다. 하지만 C언어에서는 10진수를 2진수, 8진수, 16진수로 표현 할 수 있는 방법이 있습니다. 함수를 이용하여 2진수, 8진수, 16진수를 구현해 보겠습니다. 우선 헤더파일에 "#include <stdlib.h>"를 추가합니다. 이 헤더파일에서 itoa() 함수를 이용하여 2진수, 8진수, 16진수를 구현할 것입니다.

 

쉽게 10진수를 2진수로 변환하기, 10진수를 8진수로 변환하기, 10진수를 16진수로 변환하는 프로그램을 코딩해 보자.

소스코드 실행 결과
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    char arr[10];
    int n;

    printf("정수 입력 : ");
    scanf("%d", &n);

    printf("10진수 %d를 2진수로 변환 : %s\n", n, itoa(n, arr, 2));
    printf("10진수 %d를 8진수로 변환 : %s\n", n, itoa(n, arr, 8));
    printf("10진수 %d를 16진수로 변환 : %s\n", n, itoa(n, arr, 16));

    return 0;
}

정수 입력 : 10

10진수 10를 2진수로 변환 : 1010
10진수 10를 8진수로 변환 : 12
10진수 10를 16진수로 변환 : a

 

함수 itoa()는 정수를 문자로 변환해주는 함수입니다.  함수 원형을 보면 아래와 같습니다.

    char * itoa( int value, char *buffer, int radix );

value : 변환할 숫자입니다.
buffer : 변환 결과를 포함 하는 버퍼입니다.
radix : 2-36 범위에 있어야 하는 값의 변환에 사용할 기본입니다.

 

위 itoa() 함수는 지금도 사용 할 수 있지만 업데이트 되면서 지금은 사용하지 않는 함수입니다.  그래서 _itoa()함수 사용 권장합니다. 이 함수의 원형도 아래와 같습니다.

    char * _itoa( int value, char *buffer, int radix );

value : 변환할 숫자입니다. 
buffer : 변환 결과를 포함 하는 버퍼입니다. 
radix : 2-36 범위에 있어야 하는 값의 변환에 사용할 기본입니다.

 

itoa()함수 코드를 _itoa()함수로 변경하여 코딩해도 결과는 똑같습니다.

소스코드 실행 결과
#include <stdio.h>
#include <stdlib.h>

int main(void) 
{ 
    char arr[10]; 
    int n; 

    printf("정수 입력 : "); 
    scanf("%d", &n); 

    printf("10진수 %d를 2진수로 변환 : %s\n", n, _itoa(n, arr, 2)); 
    printf("10진수 %d를 8진수로 변환 : %s\n", n, _itoa(n, arr, 8)); 
    printf("10진수 %d를 16진수로 변환 : %s\n", n, _itoa(n, arr, 16)); 

    return 0; 
}

정수 입력 : 10

10진수 10를 2진수로 변환 : 1010 
10진수 10를 8진수로 변환 : 12 
10진수 10를 16진수로 변환 : a

'프로그램언어 > C언어' 카테고리의 다른 글

c언어 팩토리얼(계승)  (0) 2019.10.15
c언어 열거형 - enum  (0) 2019.10.14
c언어 소수 구하기  (0) 2019.10.11
c언어 scanf 에러 발생  (0) 2019.10.10
c언어 파일 입출력  (0) 2019.10.08