广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言实现常见进制转换的示例代码
  • 577
分享到

C语言实现常见进制转换的示例代码

C语言实现进制转换C语言进制转换C语言进制 2023-05-14 17:05:33 577人浏览 泡泡鱼
摘要

目录前言一、十进制数转换为二进制数、八进制数二、十进制转换为十六进制三、二进制数、八进制数转换为十进制数四、十六进制数转换为十进制数前言 生活中最常见的进制是十进制,而有一类编程题会

前言

生活中最常见的进制是十进制,而有一类编程题会要求将十进制转换为其他进制,本篇博客将主要讲述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语言实现常见进制转换的示例代码的文章就介绍到这了,更多相关C语言进制转换内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C语言实现常见进制转换的示例代码

本文链接: https://www.lsjlt.com/news/203317.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作