본문 바로가기

C C++ language

C언어 이진법 to 십진법 변환기 [with source]

*이 글은 작성자의 기존 네어버 블로그에서 발췌되었습니다.

안녕하세요 오늘은 이진법 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의 다른 프로그램

: 십진법 이진법 변환기

https://blog.naver.com/tomskang/221473047114