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 = 281+ 680 = 22D;
十六转十:26H = 2161+ 6160 = 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,124 + 123 + 022 +021 + 1*20 = 25 D。
2实践演练-代码实现
在实际应用中,我们有时候会遇到需要使用进制转换功能,比如设计串口助手上位机时,有个16进制显示的功能,这时候需要进行进制转换。
上面咱们已经学习了进制转换的基本原理,接下来咱们就应该思考整理,如何编写代码实现进制转换的功能。
下面是16进制转10进制的代码:语言:C++,开发环境:VS2015。
程序已经过调试,输出无问题,16进制大小写都适用。
// lab02_hextodec.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
#include <iostream>
#include <cmath>
#include <string>
using namespace std;
int main()
{
long long hexTurnToDec(string h);// 声明转换函数
string hexinA, hexina; // 定义输入十六进制,分别为大写和小写
long long decoutA, decouta; // 定义输出十进制,分别为大写和小写的输出
cin >> hexinA >> hexina; //输入十六进制
decoutA = hexTurnToDec(hexinA); // 转换
decouta = hexTurnToDec(hexinA);
cout << decoutA << endl << decouta << endl;// 输出
system("pause");
return 0;
}
// 十六进制转十进制,大小写均可
long long hexTurnToDec(string h)
{
int hexlen = h.size();// 获取长度
long long decSum = 0;
//十六进制转换十进制
for (int i = 0; i<hexlen; i++)
{
//判断h[i]是否在A-F或a-f范围,是则与‘A’或'a'字符相减计算,否则与‘0’相减计算
if (h[i] >= 'A' && h[i] <= 'F')
{
decSum += (long long)(h[i] - 'A' + 10) * (long long)pow(16.0, hexlen - i - 1);//pow(x,y)返回 x 的 y 次幂,即 x^y
}
else if (h[i] >= 'a' && h[i] <= 'f')
{
decSum += (long long)(h[i] - 'a' + 10) * (long long)pow(16.0, hexlen - i - 1);//pow(x,y)返回 x 的 y 次幂,即 x^y
}
else decSum += (h[i] - '0') * (int)pow(16.0, hexlen - i - 1);
}
return decSum;
}
3知识裂变-拓展学习
16进制转10进制用C语言如何实现呢?
温馨提示:C语言中没有string的关键字的,一般我们是数组进行字符的存储来进行计算,然后通过scanf和printf函数进行输入和输出。赶快去试一试吧。
问:用单片机做万年历,所使用的时钟芯片DS1302读取时间和设置时间时需要用到什么进制转换?
扫描二维码关注我
![二维码.jpg](https://i-blog.csdnimg.cn/blog_migrate/e9de3636c38e7fd7368b77fa5f11f913.jpeg)