一文搞懂进制转换

一、什么是进制转换

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

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

相关推荐
chunfeng—6 分钟前
纯C协程框架NtyCo
linux·c++·后端·协程·ntyco
biubiubiu07068 分钟前
ElaticSearch
spring boot·后端·jenkins
运维@小兵10 小时前
SpringBoot获取用户信息常见问题(密码屏蔽、驼峰命名和下划线命名的自动转换)
java·spring boot·后端
问道飞鱼11 小时前
【springboot知识】配置方式实现SpringCloudGateway相关功能
java·spring boot·后端·gateway
樽酒ﻬق11 小时前
打造美观 API 文档:Spring Boot + Swagger 实战指南
java·spring boot·后端
ErizJ12 小时前
Golang | 位运算
开发语言·后端·golang·位运算
冼紫菜13 小时前
[特殊字符] Docker 从入门到实战:全流程教程 + 项目部署指南(含镜像加速)
运维·分布式·后端·docker·云原生·容器
秋野酱14 小时前
基于Spring Boot+Vue 网上书城管理系统设计与实现(源码+文档+部署讲解)
vue.js·spring boot·后端
编程毕设15 小时前
【含文档+PPT+源码】基于SpringBoot电脑DIY装机教程网站的设计与实现
java·spring boot·后端
ssslar15 小时前
MIT XV6 - 1.1 Lab: Xv6 and Unix utilities - sleep 是怎样练成的?
操作系统·risc-v·xv6