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()함수로 넘김
}
'C언어' 카테고리의 다른 글
C언어_문자열 입력받아 거꾸로 출력 #수행4 (0) | 2020.04.14 |
---|---|
C언어_화폐단위별 화폐의 개수 #수행2 (0) | 2019.02.13 |
C언어_점수대별로 학생수 표시 #수행1 (0) | 2019.02.05 |
댓글