*이 글은 작성자의 기존 네어버 블로그에서 발췌되었습니다.
안녕하세요 오늘은 이진법 to 십진법 계산기를 만들어 보았습니다.
소스코드 보겠습니다.
소스코드
source.cpp
#include <stdio.h>
#include <stdlib.h>
#define BIT 64
//부호를 제외하고 최대로 인식이 가능한 길이
//즉 입력된 이진법의 길이가 64초과이면 64글자 이상은 인식이 불가능하다
int main(void) {
char * Bin = (char *)malloc(sizeof(char) * BIT);
int plus, i;
long long num;
int Used_Max_Bit;
printf("include sign : ");
scanf("%d", &plus);
Bin[0] = getchar(); //버퍼 날리기
if (plus) { // 부호를 포함한다면
plus = getchar() - '0'; // 문자하나 읽어서 plus에 저장
}
else//아니면
plus = 0; //0으로 저장
for (i = 0; (i < BIT); i++) { //BIT까지반복(최대인식길이)
Bin[i] = getchar();//Bin[i]읽어오기
if (Bin[i] == ' ') //스페이스바 건너뛰기
i--;
else if (Bin[i] == '\n') { //엔터키가 들어오면 for문 탈출
Bin[i] = NULL;
break;
}
}
Used_Max_Bit = (i > BIT) ? BIT : i; //사용하는 최대비트를 i로 저장(i가 BIT보다 클때는 BIT로 저장)
num = 0; //num초기화
for (i = 0; i < Used_Max_Bit; i++) { //Used_Max_Bit만큼 반복
if ((Bin[i] != '0') && (Bin[i] != '1')) { //Bin[i]가 '1'이나 '0'이 아닐때
printf("You must input \'1\'or\'0\'"); // 메세지 출력
return 0; // 프로그램 종료
}
if (plus) //만약 부호가 '1'(-)라면
Bin[i] = (Bin[i] == '1') ? '0' : '1';//bin[i]를 반대로 바꾸어준다
num *= 2; //num에 2를 곱하고
num += Bin[i] - '0'; //Bin[i]가 "의미하는 숫자"를 더한다
}
if (plus) { //만약 부호가 '1'(-)라면
num++; //1의 보수를 취해준다
num *= -1; //num의 부호를 바꾼다
}
printf("Num = %lld", num); //num 출력
return 0; //프로그램 종료
}
입력1 :이진수가 부호를 포함한다면 1입력, 부호를 포함하지 않으면 0입력(+로 인식됨)
입력2 : 이진수입력
출력 : 십진수출력
실행 결과
입력 : 이진수
출력 : 십진수
이상으로 tomskang의 C 프로그래밍 - 이진수to십진수 변환 프로그램을 마칩니다.
next
tomskang의 다른 프로그램
: 십진법 이진법 변환기
'C C++ language' 카테고리의 다른 글
C언어 입력받은 글자또는 문자 출력 방법 (0) | 2021.03.13 |
---|---|
C언어 " 큰따음표와 ' 작은 따음표의 차이점 (0) | 2021.03.06 |
C언어 십진법 이진법 변환기 [with source] (0) | 2021.02.27 |
C언어 문자 아스키코드로 출력하는 방법 [with source] (0) | 2021.02.24 |
C언어 세 수중 가장 큰/작은 수 출력방법 [with source] (0) | 2021.02.13 |