一文搞懂进制转换

一、什么是进制转换

我们先看看平时我们是如何计数的:0、1、2、3、4、5、6、7、8、9,当超过9的时候就是10,此时10变成了2位数,而这两位数又是由一位的0、1组成的。在计算机中,我们将这种遇到9往前增加一位的方式叫做十进制。因为当为一位的时候他有10个数可用。

在生活当中到处都存在类似的案例,例如我们的一周:周一、二、三、四、五、六、日,此时又会回到周一,他有七天,我们可以将其称为七进制。

而计算机是由电路组成的,而电路只有开、关两种状态,所以我们将其称为二进制;用数字表示就是0和1;0表示关,1表示开。

上面提到的十进制的10或者二进制的2,这个10和2我们叫做基数 ;在十进制中的0 ~ 9,二进制中的0 ~ 1,我们叫做数码 ;开始都是一位数,当达到数码中的最大数时,会变为二位数,同理也会变为三位数,这样变化的位数我们叫做位权

根据上面的介绍我们将计算机中常见的四种进制使用表格进行对比:

进制 基数 数码 位权
十进制(D) 10 0,1,2,3,4,5,6,7,8,9 10k
二进制(B) 2 0,1 2k
八进制(O) 8 0,1,2,3,4,5,6,7 8k
十六进制(H) 16 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F 16k

注意:在十六进制中,由于10为两位为了区分使用A对应,往后推 F代表15,即达到十六进制数码的最大值,此时再往后即进一位。

为了识别一个数是以什么进制来表示,我们会添加不同的后缀,其中十进制的后缀可以省略。123(O)和123(H)表示的就是不同数。

二、为什么要进行进制转换

同样一个数,我们普通人看到的和计算机看到的是不一样的。上面我们说过计算机由于是电路组成的,他只能认识0和1,而我们作为人可以认识0、1以外的数字,那我们如何要让计算机也认识这些数字呢?这就需要进行进制转换,转换为计算机能识别的二进制来表示。

三、如何进行进制转换

3.1 按权展开法

我们先来看一个十进制数 123.01。

通过上面的基数、数码、位权我们可以进行拆分:123.01 = 1 × 102 + 2 × 101 + 3 × 100 + 0 × 10-1 + 1 × 10-2 = 123.01(D)

由上面的等式我们可以总结几点:

1、对于位权,小数点左边从0开始数,小数点右边从-1开始数。

2、一个数的每一位数码直接拿出来乘以位权来计算。

3、基数根据进制来变化。

若123.01表示八进制,那么从我们人的角度可以理解的具体是哪个数呢?我们来看看:

123.01(O) = 1 × 82 + 2 × 81 + 3 × 80 + 0 × 8-1 + 1 × 8-2 = 64 + 16 + 3 + 0 + 0.015625 = 83.015625(D)

从上面等式我们知道了八进制的 123.01 就表示我们平时看到的 83.015625。

这种转换的方式就叫做按权展开法,一般用来将其他进制转为十进制使用。

通过上面的两个数转换,我们会发现除了基数不一样,其他都是一样的,所以在计算中我们可以将一个进制数作为十进制来展开,然后把基数10换成对应的进制基数即可。

3.2 短除法

也叫做除基取余法,直到商为0则计算结束。

我们以123为例,如何将其转为二进制呢?

按照计算结果,通过余数从下往上进行列出:1111011(B)。

这种表示即 123(D) = 1111011(B),前面的123是给我们人看的,后面的1111011是给计算机看的。

3.3 减法

我们先把八进制、十六进制、二进制数码列出来对比找找规律:

八进制 十六进制 二进制 补0后
0 0 0 000 / 0000
1 1 1 001 / 0001
2 2 10 010 / 0010
3 3 11 011 / 0011
4 4 100 100 / 0100
5 5 101 101 / 0101
6 6 110 110 / 0110
7 7 111 111 / 0111
8 1000 1000
9 1001 1001
A 1010 1010
B 1011 1011
C 1100 1100
D 1101 1101
E 1110 1110
F 1111 1111

从上面我们看到八进制的最大数码对应3位二进制的最大数码;十六进制的最大数码对应4位二进制最大数码;不足的位数我们可以在前面补0;

20 = 1 23 = 8 26 = 64
21 = 2 24 = 16 27 = 128
22 = 4 25 = 32 28 = 512

上面为常用的二进制与十进制转换,记住上面可便于我们快速进行转换;

例如:我们将79转为二进制;从上表中找到最接近79且小于79的数,然后用79减去该数得到一个数,然后继续按照这个规则操作。

79 - 64 = 15 >> 减数 >> 26

15 - 8 = 7 >> 减数 >> 23

7 - 4 = 3 >> 减数 >> 22

3 - 2 = 1 >> 减数 >> 21

1 - 1 = 0 >> 减数 >> 20

根据减数使用的位权来列表

26 25 24 23 22 21 20
1 0 0 1 1 1 1

所以转换后的二进制为:1111001(B) = 79(D);

我们也可以使用上面的短除法来计算后做对比;

相关推荐
山东小木16 分钟前
JBoltAI需求分析大师:基于SpringBoot的大模型智能需求文档生成解决方案
人工智能·spring boot·后端·需求分析·jboltai·javaai·aigs
Moonbit27 分钟前
MoonBit 再次走进清华:张宏波受邀参加「思源计划」与「程序设计训练课」
前端·后端·编程语言
RestCloud30 分钟前
一站式数据集成:iPaaS 如何让开发者和业务人员都满意?
前端·后端·架构
稻草猫.1 小时前
Java多线程(一)
java·后端·java-ee·idea
Java中文社群1 小时前
炸裂:SpringAI新版发布,终于支持断线重连了!
java·后端·ai编程
哈喽姥爷1 小时前
Spring Boot--Bean的扫描和注册
java·spring boot·后端·bean的扫描和注册
problc2 小时前
Spring Boot `@Service` 互相调用全攻略:`@Autowired` vs `@Resource`
java·spring boot·后端
文心快码BaiduComate2 小时前
文心快码3.5S全新升级,体验多智能体协同开发,最高赢无人机!
前端·后端·程序员
就是帅我不改3 小时前
10万QPS压垮系统?老司机一招线程池优化,让性能飞起来!
后端·面试·github
uzong3 小时前
系统稳定性保障:研发规约V1.0
后端