一文带你读懂计算机进制

hi,大家好,我是开发者FTD。在我们的学习和工作中少不了与进制打交道,从出生开始上学,最早接触的就是十进制,当大家学习和使用计算机时候,我们又接触到了二进制、八进制以及十六进制。那么大家对进制的认识和使用是否很清楚呢?今天我就带大家一起深入了解一下计算机中的进制。

进制简介

进位制 其实是一种记数的方式,所以也称为 进位记数法/位值计数法 ,可以用有限的数字符号代表所有的数值。可使用数字符号的数目称为基数(英文:radix)或底数,基数为n,即可称n进位制,简称n进制。例如平常生活中我们经常用到的十进制,就是使用10个阿拉伯数字0-9进行记数,所以它的基数就是10,称为十进制。

在计算机的世界里,计算机语言就是二进制,计算机能直接识别二进制数据,其它数据都不能直接识别。

对于任何一个数,我们可以用不同的进位制来表示,他们是等价的,只是表示形式不同而已。

例如:对于十进制数 2021,分别用不同机制表示如下:

  • 十进制表示为:

  • 二进制表示为::

  • 八进制表示为:

  • 十六进制表示为:

右下标数字代表了是几进制,虽然表示形式不同,不过它们所代表的数值都是一样的,均为2021。

常用的进制

大家都知道,计算机是由二进制组成的,除了我们最常用的十进制外,计算机中常用的进制有二进制、八进制和十六进制。下面我们就分别介绍一下。

十进制

十进制是大家最容易理解的进制,由于有一些天然的因素,比如我们的双手总共有十根手指,所以在人类自发采用的进位制中,就很自然的使用了十进制作为主流的计数方法,而且大部分人从小接受的教育都是掌握十进制的计数方法,所以十进制几乎已经深深的烙印在我们的脑海中了。

十进制有10个基本数字,分别为 0、1、2、3、4、5、6、7、8、9,十进制的基数为10,运算规则为”逢十进一”;

十进制的表示方法有两种,使用下标或者后缀D,例如:

或者在数字后面加上后缀D,如: 2021D

当然由于十进制在日常生活中非常普遍,通常我们可以直接使用数字来表示,默认就是十进制数。

二进制

二进制由于表示简单,运算简单等特点,是计算机技术中广泛采用的一种数制,二进制由两个基本数字组成,分别为0、1,运算规则为”逢二进一”。

为了区别于其他进制,二进制的表示方法也有两种,使用下标或后缀 B ,例如:

或者在数字后面加上后缀 B ,如: 11111100101B

「二进制的特点有」:

  1. 二进制数中只有两个数码0和1,可用具有两个不同稳定状态的元器件来表示一位数码。

  2. 二进制数运算简单,大大简化了计算中运算部件的结构。

  3. 二进制天然兼容逻辑运算。

八进制

八进制有8个基本数字,分别为0、1、2、3、4、5、6、7,运算规则为”逢八进一”。

由于二进制数据的基数R较小,所以二进制数据的书写和阅读不方便,为此,在小型机中引入了八进制。八进制的基数n=8=2^3,并且每个数码正好对应三位二进制数,所以八进制能很好地反映二进制。

八进制也有两种表示方法,使用下标或后缀O,例如:

或者在数字后面加上后缀 O ,如: 3745O

另外一个八进制数,可以用3个二进制数来表示。例如:

十六进制

十六进制的引入同样是因为二进制数在实际使用中因为位数太长,不容易记忆才提出了十六进制数。

十六进制有16个基本数字,分别为0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F,运算规则为”逢十六进一”。

十六进制有两种表示方法,使用下标或后缀 H ,例如:

或者在数字后面加上后缀 H ,例如: 7e5H

一个十六进制数,可以用4位二进制数来表示。例如:

补充小知识-进制的中英文表示:

  • Binary – 二进制

  • Octal – 八进制

  • Hexadecimal – 十六进制

  • Decimal – 十进制

看完之后是不是知道后缀的字母是什么含义了吧

下面这个表格有助于我们理解各个进制之间的关系:

10进制 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
2进制 0 1 10 11 100 101 110 111 1000 1001 1010 1011 1100 1101 1110 1111 10000
8进制 0 1 2 3 4 5 6 7 10 11 12 13 14 15 16 17 20
16进制 0 1 2 3 4 5 6 7 8 9 A B C D E F 10

进制转换

我们在上面了解了常用的进制,后面在实际工作中我们可能会在不同的场景下用到不同的进制表示,这就涉及到进制的转换了,那么我们介绍一下常用的进制是如何进行转换的。

1、二进制与十进制之间的转换

十进制转二进制

计算方法:十进制数除2取余法,即十进制数除2,余数为权位上的数,得到的商值继续除2,依此步骤继续向下运算直到商为0为止。最后读数时,从最后一位读起。

例如:

十进制数: 2021 转二进制后,二进制数为: 11111100101B

计算过程如下:

第N次 十进制数 2021 余数
第1次 2021 / 2 1010 1
第2次 1010 / 2 505 0
第3次 505 / 2 252 1
第4次 252 / 2 126 0
第5次 126 / 2 63 0
第6次 63 / 2 31 1
第7次 31 / 2 15 1
第8次 15 / 2 7 1
第9次 7 / 2 3 1
第10次 3 / 2 1 1
第11次 1 / 2 0 1

计算完成后,从最后一位读起,最后结果为: 11111100101B

二进制转十进制

计算方法为:把二进制数按权展开,相加既得十进制数。

例如:

二进制数: 11111100101B 转十进制后,十进制数为: 2021

计算过程如下:

二进制 1 1 1 1 1 1 0 0 1 0 1
位数 10 9 8 7 6 5 4 3 2 1 0
公式 2^10 2^9 2^8 2^7 2^6 2^5 0 * 2^4 0 * 2^3 2^2 0 * 2^1 2^0
结果 1024 512 256 128 64 32 0 0 4 0 1

最后将每一位计算结果相加,即

最后计算结果为: 2021

2、二进制与十六进制之间的转换

十六进制转二进制

计算方法:十六进制数通过除2取余法,得到二进制数,对每个十六进制数为4个二进制数,不足时在最左边补领。

例如:

十六进制数: 7e5H 转二进制后,二进制数为: 011111100101B

计算过程如下:

首先,将十六进制7e5数分成三部分7、e、5,分别做除2取余:

第N次 十进制数 7 余数
第1次 7 / 2 3 1
第2次 3 / 2 1 1
第3次 1 / 2 0 1

7 转换为二进制数得 0111 ,不足四位,前面补零。

第N次 十进制数 14 (e 的十进制数) 余数
第1次 14 / 2 7 0
第2次 7 / 2 3 1
第3次 3 / 2 1 1
第4次 1 / 2 0 1

e 转换为二进制为: 1110

第N次 十进制数 5 余数
第1次 5 / 2 2 1
第2次 2 / 2 1 0
第3次 1 / 2 0 1

5 转换为二进制为:0101,不足四位,前面补零。

最后计算结果为: 011111100101B

二进制转十六进制

计算方法:4位二进制数按权展开相加得到1位十六进制数。注意,4位二进制数转成十六进制数是从右到左开始转换,不足时补0。

例如:

二进制数: 011111100101B 转十六进制后,十六进制数为: 7e5H

计算过程如下:

首先将二进制数按每4位进行分隔,得到 0111,1110,0101,然后分别计算十六进制数

二进制 0 1 1 1
位数 3 2 1 0
公式 0 * 2^3 2^2 2^1 2^0
结果 0 4 2 1

0111 转换为十六进制为 7

二进制 1 1 1 0
位数 3 2 1 0
公式 2^3 2^2 2^1 0 * 2^0
结果 8 4 2 0

0111 转换为十六进制为 e

二进制 0 1 0 1
位数 3 2 1 0
公式 0 * 2^3 2^2 0 * 2^1 2^0
结果 0 4 0 1

0101 转换为十六进制为 5

最后计算结果为: 7e5H

3、十进制与十六进制之间的转换

十六进制转十进制

计算方法为:把十六进制数按权展开,相加既得十进制数。

例如:

十六进制数: 7e5H 转十进制后,十进制数为: 2021

计算过程如下:

十六进制数 7 e 5
位数 2 1 0
公式 7 * 16^2 14 * 16^1 5 * 16^0
结果 1792 224 5

最后计算结果为: 2021

十进制转十六进制

计算方法:十进制数除8取余法,即十进制数除8,余数为权位上的数,得到的商值继续除8,依此步骤继续向下运算直到商为0为止。最后读数时,从最后一位读起。

例如:

十进制数: 2021 转十六进制后,十六进制数为: 7e5H

计算过程如下:

第N次 十进制数 2021 余数
第1次 2021 / 16 126 5
第2次 126 / 16 7 14
第3次 7 / 16 0 7

计算完成后,从最后一位读起,最后结果为: 7e5H

总结

通过上面的介绍和例子,相信大家已经对进制有了深刻的认识和理解,一旦你搞懂他们之间的关系,将对我们在工作中遇到的很多疑问就会迎刃而解,也让我们在处理问题上变的更游刃有余。希望上面的讲解能对大家有所帮助,如果有任何这些方面的疑问,欢迎留言骚扰。

技术人,技术魂,每天肝一篇技术文,ヾ(◍°∇°◍)ノ゙哈哈~

关于作者

联系作者

  • 微信号: ForTheDeveloper

微信号
  • 公众号: ForTheDevelopers

公众号