본문 바로가기
C언어

C언어_2진수 10진수 변환 #수행3

by JiaLee0707 2019. 2. 27.



3. 8비트로 표현된 2진수 값을 입력받아 10진수로 변환하여 출력하는 프로그램을 작성하시오.

조건 1. 2진수 값을 입력받아 10진수로 변환하는 함수를 작성하여 이용한다.

조건 2. 모든 출력은 main() 함수에서만 하도록 한다.



1) 헤더 작성(매크로 정의&include)

#define _CRT_SECURE_NO_WARNINGS    //매크로 정의(scanf 사용)

#include <stdio.h>                             //전처리기(출력함수 사용)

#include <math.h>                             //라이브러리 함수(수치함수 사용)


- #include <math.h>

<math.h>는 헤더파일로 이 헤더파일 안에는 여러 수학 함수들이 포함되어 있다.


2) main() 함수

int main() {

     int n;         //입력받을 변수

     printf("2진수 입력(8자리) : ");    //출력

     scanf("%o", &n);        //8비트로 표현된 2진수 8자리 입력

     printf("10진수 : %d\n", binary_change(n));    //binary_change() 함수에 n을 넘겨주며 호출과 동시에 출력

}


- 2진수>>10진수 바꾸는 방법

ex) 2진수 1010



 * 10진수로 2진수를 표현

1010 / 10 = 101 . . . 0

101 / 10 =  10 . . . 1

10 / 10 =   1 . . . 0

1 / 10 = 0 . . . 1


10으로 나눠 구한 나머지는 2진수를 각 자리수.

하지만 문제는 8비트로 표현된 2진수이므로 10을 8진수로 나타내서 나눈다.


3) binary_change() 함수

int binary_change(int n) {          //main()함수에서 n을 넘겨받음

     int num, m = 0, i = 0;         //num 각 자릿수를 구할 변수 m 총값을 구할 변수 i 제곱승을 셀 변수

     while (n > 0) {                //n값(2진수)이 0보다 클때까지 반복

          num = n % 8;          //나눠서 나머지로 2진수의 각 자리수를 구함

          n /= 8;          //다시 나눠 몫을 구해 n에 넣음

          m = m + (num * (int)pow(2,i));     //위에 쓴 방법처럼 구한 자릿수를 2의 i제곱와 곱해 m에 더해 10진수를 구함

     i++;                         //i를 1씩 증가해 제곱승을 증가시킴

}

return m;      //최종으로 구해진 10진수를 main()함수로 넘김

}


댓글