进制转换算法(使用C语言怎么实现一个进制转换算法)

发布时间:2025-12-11 02:32:45 浏览次数:2

1、其他进制转十进制

1.1、二进制转十进制

转换规程: 从最低位开始,将每个位上的数提取出来,乘以2的(位数-1)次方,然后求和,例如:

二进制 1011 = 1*2^0 + 1*2^1 + 0*2^2 + 1*2^3 = 1 + 2 + 0 + 8 = 11

1.2、八制转十进制

转换规则: 从最低位开始,将每个位上的数提取出来,乘以8的(位数-1)次方,然后求和,例如:

八进制 0123 = 3*8^0 + 2*8^1 + 1*8^2 = 3+16+64 = 83

1.3、十六进制转十进制

转换规则: 从最低位开始,将每个位上的数提取出来,乘以16的(位数-1)次方,然后求和,例如:

十六进制 0x34A = 10*16^0 + 4*16^1 + 3*16^2 = 10+64+768 = 842

2、十进制转其他进制

2.1、十进制转二进制binary

规则: 将该数不断除以2,直到商为0为止,然后将每步得到的余数倒过来,就是对应的二进制,故此法叫做除商逆序取余法;

案例: 将56转换为二进制

56 :
56 / 2 = 28 余0
28 / 2 = 14 余0
14 / 2 = 7 余0
7 / 2 = 3 余1
3 / 2 = 1 余1
1 / 2 = 0余 1
故56转换为二进制的结果是:111000

代码实现:

#include<stdio.h>//转十进制二进制voidmain(){printf("请输入一个十进制数:");intbinary=0;//二进制数intb=1;//循环标志intnum[100];//用来存二进制的数组intindex=0;//数组的下标intcount=-1;//用来计算数组的使用个数,这里使用-1是因为数组的下标是从0开始的//所以当我们循环一次去自增的时候,第一次应该是从0开始,如果count的初始值是0的话//就会导致使用的第一个数组的下标为1,那样会导致存数据的下标index和记录使用的下标count不一致//使数据溢出scanf("%d",&binary);while(b){num[index]=binary%2;//每次运算取余binary/=2;//每次运算二进制数需要除以2//printf("num[%d]=%d\n",index,num[index]);index++;//每循环一次数组下标就移一位count++;//每循环一次就表示占用了数组的一个位置if(binary==0){b=0;}}printf("占用数组位置%d个",count+1);printf("\n");printf("二进制数为:");for(inti=count;i>=0;i--){printf("%d",num[i]);}getchar();getchar();//回车会被接收,所以需要两个来暂停控制台}

2.2、十进制转八进制octonary

规则: 将该数不断除以8,直到商为0,然后将每步得到的余数倒过来,就是对应的八进制。

**案例:**将156转换为八进制

156:
156 / 8 = 19 余 4
19 / 8 = 2 余 3
2 / 8 = 0 余 2
故156转换为八进制的结果是:0234

代码实现:

#include<stdio.h>//十进制转八进制#defineTRUE1//宏定义true为1#defineFALSE0//宏定义false为0voidmain(){intnum[100];//定义数组用来存储转换后的八进制数intoctonary=0;//十进制数intb=TRUE;//循环赋值的标志intindex=0;//存储八进制位数的下标intcount=-1;//八进制数的位数printf("请输入一个十进制数:");scanf("%d",&octonary);while(b){num[index++]=octonary%8;//获取余数octonary/=8;//累除count++;if(octonary==0){//当octonary为0时,表示已经除完了,除到底了,这时候只需要将所得到的的余数b=FALSE;//倒过来就是需要求的八进制数了}}printf("占用数组位置%d个\n",count+1);printf("八进制数为:");for(inti=count;i>=0;i--){printf("%d",num[i]);}getchar();getchar();}

2.3、十进制转十六进制HEX(hexadecimal)

规则: 将该数不断除以16,直到商为0,然后将每步得到的余数倒过来,就是对应的十六进制。

案例: 将356转换成十六进制

356:
356 / 16 = 22 余 4
22 / 16 = 1 余 6
1 / 16 = 0 余 1
故356转换为十六进制的结果为0x164

代码实现:

#include<stdio.h>#include<stdbool.h>//十进制转换为十六进制voidmain(){inthexadecimal=0;printf("请输入一个十进制数:");scanf("%d",&hexadecimal);boolb=true;intindex=0;//数组的下标intnum[100];//用来存储转换后十六进制while(b){num[index++]=hexadecimal%16;hexadecimal/=16;if(hexadecimal==0){b=false;}}printf("占用数组的位置%d个\n",index);printf("转换后的十六进制数为:");for(inti=index-1;i>=0;i--){printf("%d",num[i]);}getchar();getchar();}

3、二进制转其他进制

3.1、二进制转八进制

规则: 从低位开始,将二进制数每三位一组(111表示7)分组,不够的用0补充,将每一组转换成对应的八进制即可

案例: 将11010101转成八进制

11010101:对其进行三位一体分组
第一组:101 ——> 5
第二组:010 ——> 2
第三组:011 ——> 3
故,二进制11010101对应的八进制数是:0325

3.2、二进制转十六进制

规则: 从低位开始,将二进制数每四位一组(1111表示F)进行分组,转成对应的十六进制数即可

案例: 将11010101转成十六进制

11010101:对其进行四位一体分组
第一组:0101 ——> 5
第二组:1101 ——> 13
故,二进制11010101转换为十六进制数是:0xD5

4、其他进制转二进制

4.1、八进制转二进制

规则: 将八进制数的每一位,转换成对应的一个三位的二进制数即可

案例: 将0237转成二进制

0237:每一位对应三位二进制数进行拆分
第一组 7 ——> 111
第二组 3 ——> 011
第三组 2 ——> 010
故,八进制数0237转换为二进制为:10011111

4.2、十六进制转二进制

规则: 将十六进制数的每一位,转换成对应的一个四位的二进制数即可

案例: 将0X23B转换成二进制数

0x23B:每一位对应四位二进制数进行拆分
第一组 B ——> 1011
第二组 3 ——> 0011
第三组 2 ——> 0010
故,0x23B转换为二进制数为:1000111011

看完上述内容,你们掌握使用C语言怎么实现一个进制转换算法的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注本站行业资讯频道,感谢各位的阅读!

进制转换算法
需要做网站?需要网络推广?欢迎咨询客户经理 13272073477