一文搞懂进制转换

一、什么是进制转换

我们先看看平时我们是如何计数的: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);

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

相关推荐
金銀銅鐵4 小时前
[Java] 用 GUI 展示 EnumSet 增减元素时的内部变化(上)
java·后端·ai编程
念何架构之路5 小时前
go-grpc设计思想
开发语言·后端·golang
system_error_x5 小时前
SpringBoot 集成 Thymeleaf 简洁入门
java·spring boot·后端
步行cgn7 小时前
Spring MVC 视图机制的核心接口与类
java·开发语言·后端·spring·mvc
码事漫谈8 小时前
AI 读你的提示词,其实很没耐心
后端
用户8356290780518 小时前
如何使用 Python 格式化 Excel 单元格中的长文本
后端·python
我命由我123458 小时前
Python 开发 - Python 的 pathlib
java·开发语言·后端·python·学习·java-ee·学习方法
IT_陈寒8 小时前
Java性能优化完全指南
前端·人工智能·后端
电子IT笔记9 小时前
对接群晖NAS,上传和删除踩坑记录
前端·后端
Mk598789 小时前
P4:把 Agent 的记忆搬进 Redis —— AgentScope-Java 工程化实战
后端