[C]10진수를 2진수로 변환해보자
10진수를 2진수로 변환하는 방법은 10진수의 수를 2로 1이 나올때 까지 나눈 다음 1부터 나머지 순서대로 적어주면 된다. 위의 방법과 C언어를 이용해 0 이상의 정수인 10진수를 2진수로 변환 해보
forprog.tistory.com
저번 게시글에서는 10진수를 2진수로만 변환해봤다. 이번에는 2진수 외에도 16진수 까지 변환 해보자.
주의점
| 나머지 | 표현 | 나머지 | 표현 |
| 1 | 1 | 10 | A |
| 2 | 2 | 11 | B |
| 3 | 3 | 12 | C |
| 4 | 4 | 13 | D |
| 5 | 5 | 14 | E |
| 6 | 6 | 15 | F |
| 7 | 7 | ||
| 8 | 8 | ||
| 9 | 9 |
10진수를 다른 진법의 수로 변화하는 방법은 동일하다. 하지만 11진법 부터는 나머지가 10이상으로 나와 숫자로 표기할 수 없다. 그래서 알파벳을 이용해서 표현해야한다.
char* denaryTo(int denary, int radix)
{
static char result[MAX] = { '\0' };
int i = 0;
do
{
if (denary % radix < 10)
result[i] = (denary % radix) + '0';
else
result[i] = (denary % radix) + 55;
denary /= radix;
i++;
} while (denary > 0);
reverse(result);
return result;
}
저번 게시글에서는 10진수를 바로 2로 나누었지만, 이번에는 변수 radix에 몇 진수로 변환할 것인지를 받아왔다.
10진법으로 표현된 값과 radix로 나눈 값이 9 이하일 때는변수 binary에 바로 나머지 값을 저장한다. 나머지가 10 이상일 경우에는 나머지 값에 대응되는 알파벳을 저장한다.

문제점
저번 게시글과 마찬가지로 0과 자연수인 경우일 때만 정상적으로 작동한다. 그리고 16진수 까지만 생각하고 작성되어서 16진수 이상의 수로 변환할려고 하면 오류가 난다.
전체 코드
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#define MAX 32
void reverse(char str[])
{
int length = strlen(str);
char cTemp = '\0';
for (int i = 0, j = (length-1); i < j; i++, j--)
{
cTemp = str[i];
str[i] = str[j];
str[j] = cTemp;
}
}
char* denaryTo(int denary, int radix)
{
static char result[MAX] = { '\0' };
int i = 0;
do
{
if (denary % radix < 10)
result[i] = (denary % radix) + '0';
else
result[i] = (denary % radix) + 55;
denary /= radix;
i++;
} while (denary > 0);
reverse(result);
return result;
}
int main(void)
{
int num = 0;
int radix = 0;
printf("0~2147483647 사이의 정수 입력: ");
scanf("%d", &num);
printf("몇 진법으로 변환하시겠습니까?: ");
scanf("%d", &radix);
char *result = denaryTo(num, radix);
printf("%d진수: %s", radix, result);
return 0;
}
//비주얼 스튜디오에서 작성됨'아무거나 코딩' 카테고리의 다른 글
| [C]10진수를 2진수로 변환해보자 (0) | 2024.04.22 |
|---|---|
| [C] 문자열 뒤집기 (0) | 2024.03.17 |