c·c++/c 프로그래밍

10진수를 2진수, 8진수, 16진수로

바로이순간 2013. 10. 16. 13:22

#include <stdio.h>


// 주어진 10진수 n을 2진수로 바꾸어 줄력해 준다.

void tobinary(int n) {


    // bin은 2진수를 담을 배열, 가장 밑의 자리부터 구하여 

    // 위로 가면서 2진수를 구해 간다. 출력할 때는 꺼꾸로 출력을 한다.

    int bin[20]={0,};


    // 인덱스 변수, i 0에서 출발한다.

    int i=0;


    // n이 0이 아닌동안 계속한다.


    // 예를 들어서 n이 5라면 

    // 5를 2로 나눈 나머지는 1이되고 몫은 2가 된다. 

    // 가장 밑의 자리는 1이다. 이 수는 bin[0]에 들어간다.


    // n은 2가 된다. 여전히 0이 아니다. 그리고 i는 1이 된다.

    // 2를 2로 나눈 나머지는 0이고 몫은 1이다.

    // bin[1]에는 0이 들어간다.

    // n은 1이 되고, i는 2가 된다.


    // n이 여전히 0이 아니므로 계속한다.

    // bin[2] 에는 1을 2로 나눈 나머지인 1이 들어 간다.

    // n은 1을 2로 나눈 몫이므로 0이 된다.


    // i는 3이 된다.

    // 이제 n이 0이 되어서 while문을 탈출한다. 이때 bin배열에는

    // 1,0,1 이 들어 있고, i의 값은 3이다.

    while(n!=0) {

        bin[i]=n%2;

        n=n/2;

        i+=1;

    }


    // 출력은 꺼꾸로 해주어야 하므로 i를 1 감소시킨다.

    i=i-1;


    // i는 2가 되고 출력을 하면 맨 뒤의 1(가장 높은 자리) 이 출력이 된다.

    // i를 감소하면 1이 되고 출력을 하면 0이 출력이 된다.

    // i를 감소하면 0이 되고 출력을 하면 1이 출력이 된다.

    // i를 감소하면 -1이 되고 while문을 탈출한다.

    while(i>=0) {

        printf("%d", bin[i]);

        i-=1;

    }

    printf("\n");

}

int main() {

    int n;

    printf("정수: ");

    scanf("%d", &n);

    printf("2진수: ");

    tobinary(n);

    printf("8진수: 0%o\n", n);

    printf("16진수: 0x%x\n", n);

    printf("ASCII: %c\n", n);


    return 0;

}

'c·c++ > c 프로그래밍' 카테고리의 다른 글

파일 expand  (0) 2013.10.25
가우스 조던 소거법  (0) 2013.10.20
c언어 연산자의 이해  (0) 2013.10.07
10001번째 소수구하기  (0) 2013.10.05
C언어 기초공부-중학생의 질문  (0) 2013.10.05