C 언어, 십진수를 2진수로 출력하기
글. 오상문 sualchi@daum.net
십진수를 입력하면 이진수로 출력하는 예제입니다.
예를 들어, 아래 왼쪽 십진수를 이진수로 출력한 값이 오른쪽입니다.
0 --> 0
1 --> 1
2 --> 10
3 --> 11
...
255 --> 11111111
256 --> 100000000
예제 소스는 다음과 같습니다. 최상위 비트가 1인 변수를 만들고 그것을 십집수 값과 비트 연산하면서 1 또는 0을 출력합니다. 단, 앞쪽에서 1이 나오기 전까지의 0을 무시하고 출력하지 않습니다. 그리고 0이 입력된 경우에는 그냥 0을 출력하고 종료합니다.
#include <stdio.h>
int main(void)
{
unsigned int bit = 1; // 쉬프트 연산 때문에 unsigned 지정
int n, print_on=0;
printf("십진수 양수 입력: ");
scanf(" %d", &n);
bit <<= (sizeof(int)*8-1); // 최상위 비트 1 설정
if(n==0) // 0일 때는 0만 출력하고 종료
printf("0");
else {
while(bit>0) {
if(bit&n && print_on==0) //첫번째 1을 만나면
print_on=1; // 출력 가능으로 지정
if(print_on)
printf("%d", (bit&n)?1:0);
bit >>= 1; // 다음 비트 검사...
}
}
return 0;
}
--------------------------------------------------------
// 다른 방식 : 앞 0 출력을 제한하는 간단한 방법
#include <stdio.h>
int main(void) {
int i, n;
unsigned int b=1<<(sizeof(int)*8-1);
printf("10진수 정수 입력: ");
scanf(" %i", &n);
if(n==0) { printf("0"); return 0; } // 0이면 0만 출력
for(i=0; i<sizeof(int)*8; i++) {
if(n&b) // 0이 아니면 '1' 출력
printf("1");
else if(n>b) // 앞쪽 0을 제외하고 출력
printf("0");
b >>= 1;
}
return 0;
}
<이상>
'C' 카테고리의 다른 글
C 언어, 윈도우 콘솔 제어 및 키 입력 함수들.... (0) | 2019.05.30 |
---|---|
C 언어, 복소수 합, 곱 예제 (0) | 2019.05.23 |
C 언어, const 변수 선언 시 자료형을 지정하지 않으면 const int로 취급 (0) | 2019.05.16 |
DevCpp printf, scanf 함수 long double 형 %LF 서식 오류 (0) | 2019.04.16 |
C 언어, 10진 정수를 2진수로 출력하기 (0) | 2019.03.09 |