C语言的进制转换及算法实现教程
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> //转十进制二进制 void main() { printf("请输入一个十进制数:"); int binary = 0; //二进制数 int b = 1; //循环标志 int num[100] ; //用来存二进制的数组 int index = 0; //数组的下标 int count = -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 (int i = 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> //十进制转八进制 #define TRUE 1 //宏定义 true为1 #define FALSE 0//宏定义 false为0 void main() { int num[100]; //定义数组用来存储转换后的八进制数 int octonary = 0; //十进制数 int b = TRUE; //循环赋值的标志 int index = 0; //存储八进制位数的下标 int count = -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 (int i = 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> //十进制转换为十六进制 void main() { int hexadecimal = 0; printf("请输入一个十进制数:"); scanf("%d",&hexadecimal); bool b = true; int index = 0;//数组的下标 int num[100];//用来存储转换后十六进制 while (b) { num[index++] = hexadecimal % 16; hexadecimal /= 16; if (hexadecimal == 0) { b = false; } } printf("占用数组的位置%d个\n",index); printf("转换后的十六进制数为:"); for (int i = 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语言的进制转换及算法实现的文章就介绍到这了,更多相关C语言进制转换及算法内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!
相关文章
- 这篇文章主要为大家详细介绍了C语言实现放烟花的程序,有音乐播放,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-23
- 本篇文章主要介绍C语言中char的知识,并附有代码实例,以便大家在学习的时候更好的理解,有需要的可以看一下...2020-04-25
使用PHP+JavaScript将HTML页面转换为图片的实例分享
这篇文章主要介绍了使用PHP+JavaScript将HTML元素转换为图片的实例分享,文后结果的截图只能体现出替换的字体,也不能说将静态页面转为图片可以加快加载,只是这种做法比较interesting XD需要的朋友可以参考下...2016-04-19- 这篇文章主要介绍了详解如何将c语言文件打包成exe可执行程序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-25
- 在开发过程中,我们经常会将日期时间的毫秒数存放到数据库,但是它对应的时间看起来就十分不方便,我们可以使用一些函数将毫秒转换成date格式。 一、 在MySQL中,有内置的函数from_unixtime()来做相应的转换,使用如下: 复制...2014-05-31
- 这篇文章主要介绍了Javascript类型转换的规则实例解析,涉及到javascript类型转换相关知识,对本文感兴趣的朋友一起学习吧...2016-02-27
- 今天小编在这里就来给美图秀秀的这一款软件的使用者们来说下把普通照片快速转换成卡通效果的教程,各位想知道具体制作步骤的使用者们,那么下面就快阿里跟着小编一起看一...2016-09-14
- free函数是释放之前某一次malloc函数申请的空间,而且只是释放空间,并不改变指针的值。下面我们就来详细探讨下...2020-04-25
详解C语言中的rename()函数和remove()函数的使用方法
这篇文章主要介绍了详解C语言中的rename()函数和remove()函数的使用方法,是C语言入门学习中的基础知识,需要的朋友可以参考下...2020-04-25- 这篇文章主要介绍了C语言中计算正弦的相关函数总结,包括正弦和双曲线正弦以及反正弦的函数,需要的朋友可以参考下...2020-04-25
- 本篇文章是对C#中数据类型转换的几种形式进行了详细的分析介绍,需要的朋友参考下...2020-06-25
- 这篇文章主要介绍了C语言中求和、计算平均值、方差和标准差的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-12-10
PHP编码转换函数mb_convert_encoding与iconv用法
文章来实现一个PHP编码转换函数mb_convert_encoding与iconv用法,希望例子能帮助到各位。 将一个短信接口代码从apache迁移到nginx+php-fpm后,发现无法发出短信了,查...2016-11-25- 这篇文章主要介绍了c#的类型转换详解,类型转换分两种形式:隐式转换、显示转换,下面是详细介绍...2020-06-25
- 本篇文章主要讲解C语言 基本语法,这里提供简单的示例和代码来详细讲解C语言的基本语法,开始学习C语言的朋友可以看一下,希望能够给你带来帮助...2021-09-18
- 这篇文章主要为大家详细介绍了JavaScript实现数据类型的相互转换,感兴趣的朋友可以参考一下...2016-03-09
- 这篇文章主要介绍了JavaScript实现Base64编码转换的相关资料,非常简单实用,需要的朋友可以参考下...2016-04-25
- 这篇文章主要介绍了C#将数字转换成字节数组的方法,涉及C#字符串操作的技巧,非常具有实用价值,需要的朋友可以参考下...2020-06-25
java中JSONObject转换为HashMap(方法+main方法调用实例)
这篇文章主要介绍了java中JSONObject转换为HashMap(方法+main方法调用实例),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-14- 这篇文章主要介绍了C语言中send()函数和sendto()函数的使用方法,是C语言入门学习中的基础知识,需要的朋友可以参考下...2020-04-25