这篇文章主要介绍“C语言如何实现常见进制转换”,在日常操作中,相信很多人在C语言如何实现常见进制转换问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言如何实现常见进制转换”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
方法:举例将十进制数100转换为二进制数,就是将100与2相除,得到商以及余数,再将商与2不断相除,最终除到商为0。按顺序记录下余数,再将余数逆序输出,即为二进制的结果。八进制同理,商不断与8相除,最终除到商为0,按顺序记录下余数,再将余数逆序输出,即八进制的结果。此方法同样可以推广到要转换成二到九的任何一种进制。
图形如下:
代码如下:
#include <stdio.h>
int main()
{
int x, n;
scanf("%d %d", &x, &n);//x是要转换的十进制数,n为要转换成的进制
int arr[100] = { 0 };//创建一个足够大的数组来存放余数
int i = 0,j = 0;
while (x)
{
arr[i++] = x % n;//存放余数,i最后的值正好是余数的个数
x /= n;
}
for (j = i - 1; j >= 0; j--)
{
printf("%d", arr[j]);//余数倒序输出
}
printf("\n");
return 0;
}
将十进制转换为十六进制同样需要用到将商不断除16以及逆序输出等方法,但由于十六进制中会出现A\B\C\D\E\F等字符,所以还需要将取得的余数做进一步转换。代码如下:
#include <stdio.h>
int main()
{
int x;
scanf("%d", &x);
char arr[100] = { 0 };//因为十六进制中会出现A\B\C\D\E\F等字符,所以保存余数的数组类型应定义为char
int i = 0, j = 0;
while (x)
{
arr[i++] = x % 16;
x /= 16;
}
for (j = 0; j < i; j++)
{
//将取出的余数转换为对应的字符
switch (arr[j])
{
case 10:arr[j] = 'A'; break;
case 11:arr[j] = 'B'; break;
case 12:arr[j] = 'C'; break;
case 13:arr[j] = 'D'; break;
case 14:arr[j] = 'E'; break;
case 15:arr[j] = 'F'; break;
default:arr[j] += 48;
}
}
for (j = i - 1; j >= 0; j--)
{
printf("%c", arr[j]);//逆序打印
}
printf("\n");
return 0;
}
方法:需要将输入的数的每一位取出,再与这个位上的权重相乘,最后相加得到结果。
代码如下:
#include <stdio.h>
#include <math.h>
int main()
{
int n = 0, sum = 0, i = 0, x = 0;
scanf("%d %d", &x, &n);//x为输入的二进制或八进制的数,n为进制。
while (x)
{
sum += (x%10)*pow(n, i++);//x%10将x的每一位取出,再与这个位上的权重相乘。
x /= 10;
}
printf("%d\n", sum);
return 0;
}
十六进制中含A\B\C\D\E\F等字符,所以在输入的时候可以将其看成输入一个字符串,需要先将每位上的字符转换为对应的数字与本位上的权重相乘,再相加得到最后的值。
代码如下:
#include <stdio.h>
#include <string.h>
#include <math.h>
int main()
{
char arr1[100] = { 0 };
scanf("%s", arr1);
int len = strlen(arr1);
int i = 0, sum = 0;
for (i = 0; i<len; i++)
{
int temp = 0;
switch (arr1[i])
{
case 'A':temp = 10; break;
case 'B':temp = 11; break;
case 'C':temp = 12; break;
case 'D':temp = 13; break;
case 'E':temp = 14; break;
case 'F':temp = 15; break;
default:temp = arr1[i] - '0'; break;
//将各个位上的字符转换为对应的数字
}
sum += temp * pow(16, len-i-1);//各个位上的权重相乘再相加
}
printf("%d\n", sum);
return 0;
}
到此,关于“C语言如何实现常见进制转换”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://blog.csdn.net/m0_74265792/article/details/129961737