楔子

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语言的进制转换以及算法实现相关推荐

  1. c语言中10转8和16的转换,(C语言)10进制转换2,8,16进制

    (C语言)10进制转换2,8,16进制 作者:vinseven #include"stdio.h" #include"conio.h" #include&quo ...

  2. C语言:进制转换(整数、字符串)

    本文重点:常见的整型.字符串进制转换(略有不同) 参考书籍:<算法笔记> 1.int型进制转换 1.1.P进制数x转换为十进制数y 实现代码如下: #include <cstdio& ...

  3. c语言ae16进制转换,进制转换工具下载_16进制2进制转换with曼彻斯特编码 1.3 免费版_极速下载站_软件下载...

    16进制2进制转换with曼彻斯特编码是一款简单易用的转换工具,可以对16进制.2进制.曼彻斯特算法.10进制等进行互转,支持802.3曼彻斯特.标准曼彻斯特.差分三种转换模式,支持曼彻斯特编码每8位 ...

  4. c语言177转换成八进制,C语言项目设计——进制转换

    <河海大学C语言项 目设计> 课程设计题目: 进制转换系统 学生学号: 学生姓名: 指导老师: 一.程序功能 本系统由c语言编写而成,主要实现对进制的转换.输入一个数,按要求转化成二进制, ...

  5. C语言笔记-进制转换

    一.进制转换     为什么要使用二进制.八进制.十进制.十六进制         因为现在的CPU只能识别高低电平,只能对二进制数据进行计算         虽然二进制的数据可以直接被CPU识别计算 ...

  6. java语言编写进制转换_Java 3种方法实现进制转换

    由其他进制转换为十进制比较简单,下面着重谈一谈十进制如何化为其他进制. 1.使用Java带有的方法Integer,最简单粗暴了,代码如下 //使用java提供的方法 //但仅局限于比较常用的二进制.八 ...

  7. 数据结构C语言版进制转换

    //进制转换: #include<stdio.h> #include<stdlib.h> #define Stack_size 100 #define Stackincream ...

  8. c语言小数点进制转换,新手求教,关于含小数的二进制转换成十进制

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include void main() { int i=0,n,j,a[20],b[20],k,c=0; double m,x,d; ...

  9. 29.【C语言】进制转换:10转16、10转2、2转10、16转10(Demo)

    算法思想: 在对于10转其他进制可以利用短除法的思想,将10进制数转换成其他进制数.,如下图所示,x为进制,num为十进制数. 1.10进制转16进制主体部分 void DecToHex(int nu ...

  10. 进制转换的算法及进制在线转换器

    整型的四种表示形式 十进制整数,如:99, -500, 0 八进制整数,要求以 0 开头,如:015 十六进制数,要求 0x 或 0X 开头,如:0x15 二进制数,要求0b或0B开头,如:0b011 ...

最新文章

  1. mysql同事包含_mysql 包含关系处理
  2. java拼接字符串 判断内容_java--字符串拼接比较
  3. 【FPGA】ODDR使用研究记录
  4. 将.gitignore应用于已提交的文件
  5. .NET Core应用框架AA介绍(二)
  6. 正则表达式 python_Python正则表达式总结
  7. Mysql 如果有多个可选条件怎么加索引_MySQL|mysql-索引
  8. 完全卸载HDP和Ambari
  9. Eclipse--java.lang.OutOfMemoryError: PermGen space
  10. 奇安信代码安全实验室帮助微软修复远程内核级漏洞,获官方致谢
  11. PascalVOC Dataset下载链接
  12. 使用CYUSB3014实现SPIFlash读写擦除控制
  13. GBase XDM使用场景
  14. windows在当前文件夹下快速使用控制台
  15. 2002版《首席执行官》观后感及总结
  16. Python之面相对象-封装 多态 约束 super()
  17. (37)DWD 层(业务数据)
  18. CSS笔记(八)盒子模型-----定位
  19. 利用python爬虫爬取图片并且制作马赛克拼图
  20. 华为数通HCIE面试看这个就够了系列——MPLS V*N

热门文章

  1. 操作系统学习笔记(二十二)~虚拟存储技术+请求分页+页面置换
  2. grub4dos和bootmgr双启动
  3. 相机成像时间与曝光时间的关系
  4. 证件照怎么裁剪?国考证件照的尺寸是多少?
  5. Kafka安全认证授权配置
  6. 鸿蒙不是Linux也不是安卓
  7. Emacs,最强编辑器,没有之一
  8. hbiuder运行php_hbuilderx中运行php图文说明
  9. ADO.NET 概述
  10. 蓝桥杯 18总决赛 A2 方阵阅兵(暴力)