输入一个非负的十进制数字,转化成二进制,八进制和16进制的C语言的代码
时间: 2024-10-20 10:07:03 浏览: 58
在C语言中,你可以使用标准库函数`itoa()`、`octet()`和`hex()`来进行十进制数到其他进制数的转换,但由于`itoa()`在某些旧版本的标准库中已不再推荐使用,这里我会提供一个自定义函数的方式,使用位操作来完成这个任务。假设我们有一个整型变量`decimal`需要转换:
```c
#include <stdio.h>
#include <string.h>
// 将十进制数转化为指定进制字符串
char* convert_to_base(int decimal, int base) {
char result[20];
int i = 0;
while (decimal > 0) {
// 计算每一位
int remainder = decimal % base;
if (remainder >= 10 && base == 16)
result[i++] = remainder - 10 + 'A'; // 对于16进制,将10-15转为A-F
else
result[i++] = remainder + '0'; // 对于其他进制,直接加上对应的字符
decimal /= base; // 更新十进制数
}
// 添加前导零,如果必要
if (i != 0 && result[i - 1] != '0')
result[--i] = '\0';
// 从后往前填充结果数组
memmove(result + i, result, strlen(result) + 1);
return result;
}
int main() {
int decimal_num = 42; // 需要转换的十进制数
printf("二进制: %s\n", convert_to_base(decimal_num, 2));
printf("八进制: %s\n", convert_to_base(decimal_num, 8));
printf("十六进制: %s\n", convert_to_base(decimal_num, 16));
return 0;
}
```
在这个例子中,`convert_to_base`函数接受一个十进制数和目标基数作为参数,然后通过循环逐位计算并添加到结果字符串中。
阅读全文