본문 바로가기

C/Study

[C] 10진수를 2진수로 출력하기

반응형

출처 - C 언어 무작정 따라하기 (길벗)

비트 연산자를 사용하여 이진수를 출력하는 방법이 일반적이나 위 책에서 특이한 방법으로 이진수를 출력하는 방법이 나와있어 정리해봄.

아래 정의된 구조체처럼 하면 1비트짜리 변수를 선언할 수 있다.

이를 union으로 하여 출력할 변수와 함께 그 변수의 비트만큼의 멤버변수를 가지는 구조체를 정의

값 입력을 union.변수에 하고 union.구조체의 멤버변수를 하나하나 읽어서 출력해준다.

단순히 이진수 출력이라면 비트 연산자를 사용하여 출력하는 방법이 훨씬 간단하겠지만 특정 비트를 조작해야되는 경우라면

아래의 경우가 더 나은 방법이 될 수도 있을것 같음.

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef union _byte{
	unsigned char byte;

	struct _bit{
		unsigned char b0	: 1;
		unsigned char b1	: 1;
		unsigned char b2	: 1;
		unsigned char b3	: 1;
		unsigned char b4	: 1;
		unsigned char b5	: 1;
		unsigned char b6	: 1;
		unsigned char b7	: 1;
		unsigned char b8	: 1;
		unsigned char b9	: 1;
		unsigned char b10	: 1;
		unsigned char b11	: 1;
		unsigned char b12	: 1;
		unsigned char b13	: 1;
		unsigned char b14	: 1;
		unsigned char b15	: 1;
		unsigned char b16	: 1;
		unsigned char b17	: 1;
		unsigned char b18	: 1;
		unsigned char b19	: 1;
		unsigned char b20	: 1;
		unsigned char b21	: 1;
		unsigned char b22	: 1;
		unsigned char b23	: 1;
		unsigned char b24	: 1;
		unsigned char b25	: 1;
		unsigned char b26	: 1;
		unsigned char b27	: 1;
		unsigned char b28	: 1;
		unsigned char b29	: 1;
		unsigned char b30	: 1;
		unsigned char b31	: 1;
	}bit;
}byte;

void main()
{
	byte data;
	int cycle = 2;

	do{
		printf("\n0부터 256까지의 값을 입력해 보세요.\n");
		printf("입력한 10진수 값을 2진수로 바꾸어서 출력합니다.\n");
		printf("[10진수] : ");
		scanf("%d", &data.byte);

		printf("\n입력한 10진수 값을 2진수로 변경하면 다음과 같습니다.\n");
		printf("%d",	data.bit.b31);
		printf("%d",	data.bit.b30);
		printf("%d",	data.bit.b29);
		printf("%d",	data.bit.b28);
		printf("%2d",	data.bit.b27);
		printf("%d",	data.bit.b26);
		printf("%d",	data.bit.b25);
		printf("%d",	data.bit.b24);
		printf("%2d",	data.bit.b23);
		printf("%d",	data.bit.b22);
		printf("%d",	data.bit.b21);
		printf("%d",	data.bit.b20);
		printf("%2d",	data.bit.b19);
		printf("%d",	data.bit.b18);
		printf("%d",	data.bit.b17);
		printf("%d",	data.bit.b16);
		printf("%2d",	data.bit.b15);
		printf("%d",	data.bit.b14);
		printf("%d",	data.bit.b13);
		printf("%d",	data.bit.b12);
		printf("%2d",	data.bit.b11);
		printf("%d",	data.bit.b10);
		printf("%d",	data.bit.b9);
		printf("%d",	data.bit.b8);
		printf("%2d",	data.bit.b7);
		printf("%d",	data.bit.b6);
		printf("%d",	data.bit.b5);
		printf("%d",	data.bit.b4);
		printf("%2d",	data.bit.b3);
		printf("%d",	data.bit.b2);
		printf("%d",	data.bit.b1);
		printf("%d",	data.bit.b0);
		printf("\n\n");

		do{
			printf("1. 계속하기\n0. 끝내기\n숫자를 입력해 주세요 : ");
			scanf("%d", &cycle);
			fflush(stdin);
			
			if(!(cycle == 1 || cycle == 0))
			{
				printf("1 또는 0을 입력 해야 합니다.\n\n");
			}
		}while(!(cycle == 1 || cycle == 0));
	}while(cycle == 1);

	system("pause");
}
반응형