[C언어 소스] 2진수로 출력하기

안녕하세요. 언제나 휴일에 언휴예요.

이번 실습은 정수를 2진수로 출력하는 코드 작성입니다.

첫 번째 방식은 32개의 각 자리가 1인지 확인하는 방법입니다.

void PrintBinary(int num)
{	
	unsigned cnum = 1 << 31;
	int check = 0;
	while (cnum)
	{
		if (cnum & num)
		{
			printf("1");
			check = 1;
		}
		else
		{
			if (check != 0)
			{
				printf("0");
			}
			
		}
		cnum = cnum >> 1;
	}	
}

두 번째 방식은 일의 자리가 1인지 확인하고 2로 나눈 값으로 다시 재귀 함수를 호출하는 방식입니다.

역순으로 출력해야 하기 때문에 일의 자기가 1인지 확인한 값은 재귀 함수 호출 뒤에 출력합니다.

void PrintBinary2(int num)
{	
	if (num == 0)
	{
		return;
	}	
	PrintBinary2(num / 2);
	printf("%d", num%2);
}

다음은 테스트를 위한 main 함수를 포함한 코드입니다.

#include 
void PrintBinary(int num);
void PrintBinary2(int num);
int main()
{
	PrintBinary(4);
	printf("\n");
	PrintBinary(9);
	printf("\n");
	PrintBinary(23);
	printf("\n");
	PrintBinary2(4);
	printf("\n");
	PrintBinary2(9);
	printf("\n");
	PrintBinary2(23);
	printf("\n");
	return 0;
}

void PrintBinary(int num)
{	
	unsigned cnum = 1 << 31;
	int check = 0;
	while (cnum)
	{
		if (cnum & num)
		{
			printf("1");
			check = 1;
		}
		else
		{
			if (check != 0)
			{
				printf("0");
			}
			
		}
		cnum = cnum >> 1;
	}	
}
void PrintBinary2(int num)
{	
	if (num == 0)
	{
		return;
	}	
	PrintBinary2(num / 2);
	printf("%d", num%2);
}

실행 결과는 다음과 같습니다.

100
1001
10111
100
1001
10111