프로그래밍/C

[C언어 예제-1] 2진수(binary) 출력

Peter Ahn 2018. 6. 5. 00:07
반응형

안녕하세요 피터입니다.

오늘은 C언어로 2진수를 출력하는 예제를 소개해드리겠습니다.


개요

일상 생활에서 우리가 다루는 숫자는 10진법을 사용합니다.

하지만 컴퓨터의 세계는 0과 1로 이루어져있죠.


경우에 따라서는 10진수로 되어 있는 숫자를 2진수로 변환애서 출력해볼 필요가 있습니다. (일반적인 경우에는 16진수로 출력하겠지만요!)


이번에 소개드릴 예제는 양수 또는 음수의 10진수를 입력받아서 2진수로 출력하는 예제입니다.


당연한 얘기겠지만 C언어의 비트 연산자를 사용합니다.

연산자에 대한 내용은 아래 글을 참조해주세요.

[C언어 강좌-7] 연산자 (Operator)


예제 소스

#include 
int main()
{
	int input = 0;
	int mask;

	while (true)
	{
		printf("Input Number(Decimal: if you input zero then exit): ");
		scanf_s("%d", &input);

		if (input == 0)
		{
			break;
		}

		for (int i = 31; i >= 0; i--)
		{
			mask = 1 << i;
			printf("%d", input & mask ? 1 : 0);


			if (i % 8 == 0)
				printf(" ");
		}
		printf("\n");
	}

    return 0;
}

사용자의 입력을 scanf 함수를 이용해서 input 변수에 담습니다.


for 구문에서는 mask 변수를 이용하여 맨 왼쪽 비트(bit)부터 순차적으로 한글자씩 출력합니다.

현재 자리수만 1이고 나머지가 0인 mask과 input 값과 & 연산(and 연산)을 하면 현재 자리수의 값이 0인지 1인지 알 수가 있습니다.

이때 8 비트 단위로 한칸 띄어쓰기를 해줘서 가독성을 높입니다.


실행 결과

Input Number(Decimal: if you input zero then exit): 100
00000000 00000000 00000000 01100100
Input Number(Decimal: if you input zero then exit): 255
00000000 00000000 00000000 11111111
Input Number(Decimal: if you input zero then exit): -200
11111111 11111111 11111111 00111000
Input Number(Decimal: if you input zero then exit): 65535
00000000 00000000 11111111 11111111
Input Number(Decimal: if you input zero then exit):

컴퓨터는 음수를 표현할 때 2의 보수 형태로 표현합니다.
2의 보수란 값의 모든 비트를 반전(0은 1으로, 1은 0으로) 시킨 후 1을 더한 값입니다.

그렇기 때문에 값이 음수인지 양수인지 알기 위해서 맨 앞자리 비트실제 값으로 사용하지 않고 부호 비트(sign bit)로 사용됩니다.

만일 맨 앞자리 비트를 부호 비트가 아닌 값으로 사용하고 싶을 때에는 unsigned 로 선언하면 됩니다.

아래처럼요.

unsigned int a;




-Peter의 우아한 프로그래밍

여러분의 댓글은 저에게 크나큰 힘이 됩니다. 오류 및 의견 주시면 감사하겠습니다.

반응형