C语言的进制转换以及算法实现
楔子
2021-1-20,天气阴,今天感觉乱糟糟的,心态也不好,什么都提不起兴趣来,唉,这疫情什么时候才能结束啊!!!
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 余028 / 2 = 14 余0 14 / 2 = 7 余07 / 2 = 3 余13 / 2 = 1 余11 / 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 余 419 / 8 = 2 余 32 / 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 余 422 / 16 = 1 余 61 / 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语言中10转8和16的转换,(C语言)10进制转换2,8,16进制
(C语言)10进制转换2,8,16进制 作者:vinseven #include"stdio.h" #include"conio.h" #include&quo ...
- C语言:进制转换(整数、字符串)
本文重点:常见的整型.字符串进制转换(略有不同) 参考书籍:<算法笔记> 1.int型进制转换 1.1.P进制数x转换为十进制数y 实现代码如下: #include <cstdio& ...
- c语言ae16进制转换,进制转换工具下载_16进制2进制转换with曼彻斯特编码 1.3 免费版_极速下载站_软件下载...
16进制2进制转换with曼彻斯特编码是一款简单易用的转换工具,可以对16进制.2进制.曼彻斯特算法.10进制等进行互转,支持802.3曼彻斯特.标准曼彻斯特.差分三种转换模式,支持曼彻斯特编码每8位 ...
- c语言177转换成八进制,C语言项目设计——进制转换
<河海大学C语言项 目设计> 课程设计题目: 进制转换系统 学生学号: 学生姓名: 指导老师: 一.程序功能 本系统由c语言编写而成,主要实现对进制的转换.输入一个数,按要求转化成二进制, ...
- C语言笔记-进制转换
一.进制转换 为什么要使用二进制.八进制.十进制.十六进制 因为现在的CPU只能识别高低电平,只能对二进制数据进行计算 虽然二进制的数据可以直接被CPU识别计算 ...
- java语言编写进制转换_Java 3种方法实现进制转换
由其他进制转换为十进制比较简单,下面着重谈一谈十进制如何化为其他进制. 1.使用Java带有的方法Integer,最简单粗暴了,代码如下 //使用java提供的方法 //但仅局限于比较常用的二进制.八 ...
- 数据结构C语言版进制转换
//进制转换: #include<stdio.h> #include<stdlib.h> #define Stack_size 100 #define Stackincream ...
- c语言小数点进制转换,新手求教,关于含小数的二进制转换成十进制
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include void main() { int i=0,n,j,a[20],b[20],k,c=0; double m,x,d; ...
- 29.【C语言】进制转换:10转16、10转2、2转10、16转10(Demo)
算法思想: 在对于10转其他进制可以利用短除法的思想,将10进制数转换成其他进制数.,如下图所示,x为进制,num为十进制数. 1.10进制转16进制主体部分 void DecToHex(int nu ...
- 进制转换的算法及进制在线转换器
整型的四种表示形式 十进制整数,如:99, -500, 0 八进制整数,要求以 0 开头,如:015 十六进制数,要求 0x 或 0X 开头,如:0x15 二进制数,要求0b或0B开头,如:0b011 ...
最新文章
- ×××视频下载:皮皮影视客户端功能使用
- HTML自动换行的问题
- HDLBits答案(16)_Verilog有限状态机(3)
- python互斥锁原理_python并发编程之多进程1------互斥锁与进程间的通信
- java程序给输出汉字_java面试题目编写一个java程序,实现拼音转成对应汉字功能。...
- 三峡大学 计算机学院 刘洋,三峡大学科技学院2016年预科内升本专业分流结果公示...
- 【Go】Go语言中反射包的实现原理(The Laws of Reflection)
- 我讨厌计算机作文500,我讨厌谎言作文500字(精选5篇)
- 使用浏览器访问服务器shell(ssh方式)
- 测试流程如何有效落地?
- Win10下开机自动启动运行bat脚本并打开cmd运行命令
- 树莓派无线中继的实现
- 基于python和高德地图租房系统的设计与实现
- 推荐一个svg转ico的在线网站(非常清晰)
- 苹果发布2021款iPad Pro,并搭载M1芯片,性能大幅提升
- 2020年的数据工程
- creo打不开stp文件_Creo怎么打开stp格式的文件?
- nobup 与 后台运行命令
- java 内存溢出 扩大jvm内存
- python打造记账本,记账本-简单的python脚本