C/C++每日一问--进制转换

6月收官,7月伊始,2020,进入暑期。
考研迎来了一个比较关键的时期,从现在开始进行专业课--C/C++的复习,为了保证学习质量、夯实基础,特别设置【每日一问】专栏,对自己的学习成果进行实践检验以及知识拓展,裂变自己接触和学习过的知识及技巧;主要是理论和实践相结合,以基础知识为主,实践操作为辅,保证学习效果,和大家一起回顾知识,共同进步,加油!
特别提示:【每日一问】栏目包括但不限于【今日主题】、【实践演练】、【知识裂变】等模块,内容比较基础,适合新手学习以及熟手进行知识回顾,大神勿喷,请自动绕道,谢谢!
1今日主题-进制转换
今天我们先来学习一下进制转换,主要包括十进制与二进制、八进制、十六进制之间的相互转换。
提示:
二进制:由0、1组成,末尾加B表示二进制;
八进制:由0~7中数字的组成,末尾加Q表示八进制;
十进制:由0~9中的数字组成,末尾加D表示十进制;
十六进制:由0~9、A(10)~F(15)中的数字、字母组成,末尾加H表示十六进制;
1、十进制-->“R”进制,R=2、8、16
整数:除R取余法;
小数:乘R取整法;
比如十进制转二进制:
整数:除2取余,按高位-低位排列,具体如下图:

小数:乘2取整,按高位-低位排列,具体如下图:

2“R”进制转十进制,R=8、16
根据进制进行求解:
八转十:26Q = 2*81+ 6*80 = 22D;
十六转十:26H = 2*161+ 6*160 = 38D。
3、二进制转“R”进制,R=8、10、16
二转八:取三合一;位数从高到低代表22、21、20,数字相乘加起来就是转换后的数字,如:10 100 101 B,转换为八进制为:245Q;
二转十六:取四合一;位数从高到低代表23、22、21、20,数字相乘加起来就是转换后的数字;
如:1001 0101 B,转换为十六进制为:a5H;
二转十:位数从高到低代表2n、...、23、22、21、20,数字相乘加起来就是转换后的数字;
如:11001 B,1*24 + 1*23 + 0*22 +0*21 + 1*20 = 25 D。
2实践演练-代码实现
在实际应用中,我们有时候会遇到需要使用进制转换功能,比如设计串口助手上位机时,有个16进制显示的功能,这时候需要进行进制转换。
上面咱们已经学习了进制转换的基本原理,接下来咱们就应该思考整理,如何编写代码实现进制转换的功能。
3知识裂变-拓展学习
16进制转10进制用C语言如何实现呢?
温馨提示:C语言中没有string的关键字的,一般我们是数组进行字符的存储来进行计算,然后通过scanf和printf函数进行输入和输出。赶快去试一试吧。
问:用单片机做万年历,所使用的时钟芯片DS1302读取时间和设置时间时需要用到什么进制转换?

扫描二维码关注我
置顶/星标公众号,和我一起学习吧!