반응형
출처 - 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");
}
반응형
'C > Study' 카테고리의 다른 글
[C] Ctrl + Z 입력을 받을 때까지 반복해서 입력 받기 (0) | 2024.12.16 |
---|---|
[C] 소수 구하는 프로그램 (0) | 2024.12.16 |
[C] NULL과 널문자 (0) | 2024.12.15 |
[C] 메모리 공간의 할당과 초기화가 동시에 일어나는 상황 (0) | 2024.12.15 |
[C] scanf 함수 char형 하나의 문자 입력받을 시 발생하는 문제 (0) | 2024.12.15 |