본문 바로가기

프로그래밍/C, C++

[C언어] stdio.h 만 써서 (양수, 음수) 10진수를 2진수로 변환하는 코드 만들기

728x90
반응형

(양수, 음수) 10진수를 2진수로 변환하는 프로그램.exe

 

CPP.exe
0.01MB

 

[C언어] stdio.h 만 써서 (양수, 음수) 10진수를 2진수로 변환하는 코드 만들기


 

오늘 기분 진짜 꿀꿀해서 마음 안정화및 평정심 유지를 위해

 

만들어 보고 싶었던 2진수 변환기를 만들었다.

 

#include<stdio.h>

#define NINE 9999

int nUmberCheck(int arr[NINE]);

int main()
{
	int iNpuTnUmber = 0, qUotiEnt = 0, sTackCount = 0;		// qUotiEnt = 몫
	int i, u, biNaryCount, zEroCount, oCta;
	int biNaryArray[NINE];		// 나머지가 저장되는 2진수 배열

	while (true)
	{
		/*변수 초기화*/
		biNaryCount = 0, zEroCount = 0, oCta = 8;

		/*biNaryArray배열을 전부 2로 초기화 합니다.*/
		for (i = 0; i <= NINE - 1; i++)
		{
			biNaryArray[i] = 2;
		}

		printf("10진수를 2진수로 변환합니다.\n10진수를 입력하시오. (예: 12 ) : ");
		scanf("%d", &iNpuTnUmber);

		/*입력된 값이 0일 경우*/
		if (iNpuTnUmber == 0)
		{
			printf("\n0을 입력하였습니다. 다시 입력해 주세요.\n\n");
			continue;
		}
		/*입력된 값이 양수일 경우*/
		else if(iNpuTnUmber > 0)
		{
			/*입력된 값을 몫변수에 저장*/
			qUotiEnt = iNpuTnUmber;

			/*입력 받은 값을 2로 나누어 나머지는 배열에 몫은 또 나누기 위해 몫에 저장합니다.*/
			for (i = 0; qUotiEnt > 0; i++)
			{
				biNaryArray[i] = qUotiEnt % 2;
				qUotiEnt = qUotiEnt / 2;
			}

			/*나머지가 몇 개 저장되었는지 확인하는 함수를 호출*/
			biNaryCount = nUmberCheck(biNaryArray);

			/*8자리를 만들기 위해 8의 배수에서 현재 배열의 갯수를 빼줍니다.*/
			while(1)
			{
				if (biNaryCount <= oCta)
				{
					zEroCount = oCta - biNaryCount;
					break;
				}
				else
				{
					oCta *= 2;
					continue;
				}
				
			}

			/*8의 배수의 자리를 이미 채워진 나머지를 제외하고 0으로 채웁니다.*/
			for (; zEroCount > 0; i++)
			{
				biNaryArray[i] = 0;
				zEroCount--;
			}

			printf("\n2진수변환 결과를 출력합니다.\n\n");

			/*배열에 저장된 나머지를 역순으로 출력합니다.*/
			for (u = i - 1; u >= 0; u--)
			{
				printf(" %d", biNaryArray[u]);
			}

			printf("\n\n");
			continue;
		}
		/*입력된 값이 음수일 경우*/
		else if(iNpuTnUmber < 0)
		{
			/*입력된 값을 * -1하여 몫변수에 저장*/
			qUotiEnt = iNpuTnUmber * -1;

			/*입력 받은 값을 2로 나누어 나머지는 배열에 몫은 또 나누기 위해 몫에 저장합니다.*/
			for (i = 0; qUotiEnt > 0; i++)
			{
				biNaryArray[i] = qUotiEnt % 2;
				qUotiEnt = qUotiEnt / 2;
			}

			/*나머지가 몇 개 저장되었는지 확인하는 함수를 호출*/
			biNaryCount = nUmberCheck(biNaryArray);

			/*배열에 저장된 나머지를 0은 1로 1은 0으로 변환합니다.*/
			for (u = 0; u < biNaryCount; u++)
			{
				if (biNaryArray[u] == 0) biNaryArray[u] = 1;
				else if (biNaryArray[u] == 1) biNaryArray[u] = 0;
			}

			/*1을 더해줍니다.*/
			for (u = 0; u < biNaryCount; u++)
			{
				if (biNaryArray[u] == 1)
				{
					biNaryArray[u] = 0;
					sTackCount = u;
				}
				else if(biNaryArray[u] == 0)
				{
					biNaryArray[u] = 1;
					break;
				}
			}

			/*8자리를 만들기 위해 8의 배수에서 현재 배열의 갯수를 빼줍니다.*/
			while (1)
			{
				if (biNaryCount <= oCta)
				{
					zEroCount = oCta - biNaryCount;
					break;
				}
				else
				{
					oCta *= 2;
					continue;
				}
			}

			/*8의 배수의 자리를 이미 채워진 나머지를 제외하고 1으로 채웁니다.*/
			for (; zEroCount > 0; i++)
			{
				biNaryArray[i] = 1;
				zEroCount--;
			}

			printf("\n2진수변환 결과를 출력합니다.\n\n");

			/*배열에 저장된 나머지를 역순으로 출력합니다.*/
			for (u = i - 1; u >= 0; u--)
			{
				printf(" %d", biNaryArray[u]);
			}

			printf("\n\n");
			continue;

		}
	}
}

/*배열의 나머지 갯수를 확인하는 함수*/
int nUmberCheck(int arr[9999])
{
	int i, count = 0;
	for (i = 0; i <= NINE - 1; i++)
	{
		if (arr[i] != 2)
		{
			count += 1;
		}
		else continue;
	}

	return count;
}

 

비트연산자같은건 배운지 한학기만에 까먹었고

 

다른 함수들은 모르기에

 

쓰지않고 근-본을 유지하며

 

stdio.h만을 사용한 양수, 음수 10진수를 2진수로 변환하는 코드를 만들어봤다.

 

 

음수를 2진수로 변환하는 방법도 까먹었기에 지식인에 물어봤음

 

 

 

어디 학교에서 2진수 변환 프로그램 만드는게 과제라던데

 

이렇게 쓰면 b는 줄라나

 

그래도 만들고 싶었던 코드 만드니까 기분이 풀린다 헤헤

728x90
반응형