文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C语言如何实现常见进制转换

2023-07-05 22:44

关注

这篇文章主要介绍“C语言如何实现常见进制转换”,在日常操作中,相信很多人在C语言如何实现常见进制转换问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言如何实现常见进制转换”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

一、十进制数转换为二进制数、八进制数

方法:举例将十进制数100转换为二进制数,就是将100与2相除,得到商以及余数,再将商与2不断相除,最终除到商为0。按顺序记录下余数,再将余数逆序输出,即为二进制的结果。八进制同理,商不断与8相除,最终除到商为0,按顺序记录下余数,再将余数逆序输出,即八进制的结果。此方法同样可以推广到要转换成二到九的任何一种进制。

图形如下:

C语言如何实现常见进制转换

代码如下:

#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语言如何实现常见进制转换”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯