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;
}
相关文章
|
1月前
|
存储 网络协议 算法
【C语言】进制转换无难事:二进制、十进制、八进制与十六进制的全解析与实例
进制转换是计算机编程中常见的操作。在C语言中,了解如何在不同进制之间转换数据对于处理和显示数据非常重要。本文将详细介绍如何在二进制、十进制、八进制和十六进制之间进行转换。
39 5
|
4月前
|
存储 C语言
【C语言基础考研向】04整型进制转换
本文介绍了计算机中整型常量的不同进制表示,包括二进制、八进制、十六进制和十进制,并解释了它们之间的转换方法。以一个32位整型数为例,展示了其在不同进制下的表示形式及计算方法,特别指出在内存观察中常用十六进制,同时提到了小端存储方式对数据的影响。
|
8月前
|
存储 编译器 C语言
爱上C语言:整型和浮点型在内存中的存储(进制转换,原码,反码,补码以及大小端)
爱上C语言:整型和浮点型在内存中的存储(进制转换,原码,反码,补码以及大小端)
|
8月前
|
C语言
C语言进制转换
C语言进制转换
|
8月前
|
存储 编译器 C语言
C语言:进制转换以及原码、反码、补码
C语言:进制转换以及原码、反码、补码
189 0
|
8月前
|
数据处理 C语言
【C语言宝库】- 操作符|详解进制转换|计算机小白必备技能(上)
【C语言宝库】- 操作符|详解进制转换|计算机小白必备技能(上)
82 0
|
8月前
|
存储 编译器 C语言
c语言进制转换、操作符万字详解------附带多道经典习题
常用的进制分类 二进制:由0和1组成 八进制:由0~7数字组成 十进制:由0~9数字组成 十六进制:由0~9和A~F组成
|
C语言
【C语言航路外传】进制转换
【C语言航路外传】进制转换
65 0
|
C语言
C语言的进制转换
C语言的进制转换