进制 - 详解
世界上有10种人,懂二进制的和不懂二进制的。还有一种以为这只是个二进制笑话的。
一. 数字系统
1. 远古时期🔮:
在很久很久以前。。
- 结绳记事
- 石板刻线
- …
弊端:数字越大,越难记录😓
于是,各个地方的人类发明了更为先进的计数方法。。。
2. 非位置化数字系统:
非位置化数字系统中,符号所在位置与其大小无关,数字的大小就是各个符号所表示的大小直接相加或相减的结果。
罗马数字就是一个典型的例子:
VVV = 5 + 5 + 5 = 15 != 555
3. 位置化数字系统:
位置化数字系统中,符号所占据的位置决定了其表示的值,数字的大小需要视各个符号所表示的大小及其所在位置而定。
它包括:
二进制(Binary)/八进制(Octal)/十进制(Decimal)/十六进制(Hexadecimal)/…
555 = 500 + 50 + 5 = 555 != 15
由于非位置化数字系统效率太低,现在基本不再使用,位置化数字系统成为主流👍。
🙌因为人有十根手指头,所以很自然的选择了十进制进行数学运算。
🖥那么为什么计算机却选择使用二进制进行运算和存储呢?
二. 计算机使用二进制的原因
其实在历史上,世界上第一台通用计算机——ENIAC[1] 使用的就是十进制。
但这台计算机运行还得靠手动插线拔线,非常麻烦且不可靠:
后来,现代计算机之父——冯·诺依曼[2] 提出:采用二进制更有效率啊!
这是因为计算机是由电子元件组成的,而电子元件可以非常明确的表示出两种状态:通电/断电。
这两种状态非常适合用于二进制的表示:即1/0。
除了硬件实现简单之外,使用二进制还有抗干扰能力强的特点:
即使电压发生轻微波动,计算机也能很容易地分辨出表示1的高电平和表示0的低电平,从而减少误差。
再其次,二进制的符号1和0恰好与逻辑运算中的对(true)与错(false)对应,便于计算机进行逻辑运算。
等等。。
三. 进制转换⇄
在学习进制转换之前,我们先要理解好十进制的本质。
1. 十进制的本质:
十进制是基数为10的数字系统,逢十进一。
使用10个可用符号(0~9)来表示一个数字,数字的位置从右往左依次是个位、十位、百位、千位…,对应的权重依次为:100、101、102、103…
如图:
这个数字的大小就等于:
1 × 103 + 1 × 102 + 4 × 101 + 5 × 100 = 1145
(由于这里权重就是在以十进制描述,因此十进制数字的大小其实就是这个数字本身)
2. 二进制的本质&二进制转换十进制:
二进制是基数为2的数字系统,逢二进一。
使用2个可用符号(0&1)来表示一个数字,数字的位置从右往左依次是个位、二位、四位、八位…,对应的权重依次为:20、21、22、23…
如图:
这个二进制数字所代表的十进制数字就是:
1 × 23 + 0 × 22 + 1 × 21 + 1 × 20 = 11
(这里我们仍然以十进制描述权重,所以所得结果就是二进制数字对应的十进制数字)
问:二进制数101001对应的十进制数?
🎉恭喜你已经学会了二进制向十进制的转换。
八进制和十六进制又是什么鬼?
3. 类比:八进制/十六进制转十进制:
Ⅰ. 八进制转十进制:
八进制的本质同理,不再赘述。
🌰栗子:八进制数277对应的十进制数?
2 × 82 + 7 × 81 + 7 × 80 = 191
Ⅱ. 十六进制转十进制:
十六进制就有点不同了,对于10~15的数字,我们采用字母A~F来进行表示:
十进制 | 十六进制 |
---|---|
10 | A |
11 | B |
12 | C |
13 | D |
14 | E |
15 | F |
(对于基数大于十的进制的字符替换规则同理)
🌰栗子:十六进制数2AE对应的十进制数?
2 × 162 + 10 × 161 + 14 × 160 = 686
4. 十进制转二进制:
要把十进制数转化为对应的二进制数,需要不断地将十进制数字除以2(商),获取商和余数,直到商为0,再将所得余数倒序排列,所得数字即为该十进制数对应的二进制数。
如图:
💡以下是论证过程:
设已知一个二进制数字B,对应十进制数字为D
则:
B = XN…X4X3X2X1(这里的Xn都表示0或1,假设共有N位)
D = YM…Y4Y3Y2Y1 = X1 × 20 + X2 × 21 + X3 × 22 + X4 × 23 + … + XN × 2N(这里的Yn都表示0~9一整数,假设共有M位)
由于B = D,所以:
D ÷ 2 = D1 ······ m => B ÷ 2 = XN…X5X4X3X2 ······ X1(这里的Dn指第n次除以2所得的商,D1即为第一次;m表示余数0或1)
所以:(Bn表示Dn的二进制)
D1 = B1 = XN…X5X4X3X2; m = X1
继续进行以上操作,易得:
D2 = B2 = XN…X6X5X4X3; m = X2
D3 = B3 = XN…X7X6X5X4; m = X3
D4 = B4 = XN…X8X7X6X5; m = X4
…
DN-1 = BN-1 = XN; m = XN-1
DN = BN = 0; m = XN
商DN为0,结束。倒序排列所得余数m,得:
XNXN-1…X4X3X2X1 = B
😎
问:十进制数22对应的二进制数?
🎉恭喜你又学会了十进制向二进制的转换。
下课!(?)
其他进制呢?
5. 类比:十进制转八进制/十六进制:
Ⅰ. 十进制转八进制:
🌰栗子:十进制数900对应的八进制数?
如图:
Ⅱ. 十进制转十六进制:
🌰栗子:十进制数2717对应的十六进制数?
如图:
6. 二进制/八进制/十六进制的互相转换:
知道了二/八/十六进制和十进制的互相转换,那么当要将二/八/十六进制进行互相转换时,是否还要大费周章地先将其转换为十进制,再将十进制转换为目标进制呢?😦
以下是一些简便的计算方法👇
-
由于23 = 8,所以每3位二进制可以转换为一位八进制:
🌰举个栗子:
10111001(2) => 10|111|001 => 1 × 21 + 0 × 20|1 × 22 + 1 × 21 + 1 × 20|0 × 22 + 0 × 21 + 1 × 20 => 271(8)
-
由于24 = 16,所以每4位二进制可以转换为一位十六进制:
🌰举个栗子:
10111001(2) => 1011|1001 => 1 × 23 + 0 × 22 + 1 × 21 + 1 × 20|1 × 23 + 0 × 22 + 0 × 21 + 1 × 20 => B9(16)
那么八进制又该如何转为十六进制呢?
采用二进制中转法比较简便:
步骤:
- 先将八进制数每1位转为3位二进制(不足补零)。
- 将所得二进制数每4位一组转为十六进制(不足补零)。
🌰举个栗子:
271(8) => 010|111|001 => 10111001(2) => 1011|1001 => B9(16)
以上说的全部反过来,就是:
-
八进制 → 二进制:每位八进制数展开为3位二进制。
-
十六进制 → 二进制:每位十六进制数展开为4位二进制。
-
十六进制 → 八进制:通过二进制中转:
- 十六进制 → 二进制(每1位转4位)。
- 二进制 → 八进制(每3位转1位)。
😎只要理解了本质,我们可以将这些进制的换算方法类推到其他所有进制!
恭喜你已经学会了进制的转换!
🎊完结撒花yeahh🎊
四. 其他の东东~
1. 存储单位:
在了解了进制后,我们还需要知道几个常用的计量单位:
-
比特(bit):
表示一位二进制数字,即0或1
是数据的最小存储单位
例如二进制数字1011就是由4个比特组成的,分别是1、0、1、1
-
字节(byte):
一个字节由8个比特组成:
1byte = 8bit
它是计算机的基本存储单位
1字节可以表示的最大二进制数字,是:11111111
11111111(2) = 255(10)
它们是我们理解计算机操作和存储机制的基础。
还有其他常见单位及换算:
1KB(千字节 KiloByte) = 210B = 1024B
1MB(兆字节 MegaByte) = 210KB = 1024KB
1GB(吉字节 GigaByte) = 210MB = 1024MB
1TB(太字节 TeraByte) = 210GB = 1024GB
2. 不同进制数的读法:
如果你理解了数位,那么你就一定就能理解只有十进制才遵循“几千、几十、几百”的汉语读法
而其他进制只能逐位地读出各位上的数字(或字母),并且最好说明其进制
例如:
1(2) + 1(2) = 10(2)
就不能读成:
一加一等于十(?)
在线进制转换工具:
参考资料:
ENIAC(Electronic Numerical Integrator And Computer ”电子数字积分计算机”)。ENIAC是继ABC(Atanasoff-Berry Computer ”阿塔纳索夫-贝瑞计算机“)之后的第二台电子计算机,和第一台通用计算机,于1946年2月14日在美国宣告诞生。ENIAC的计算速度为每秒5000次加法或400次乘法,它是完全的电子计算机,能够重新编程,解决各种计算问题。 ↩︎
约翰·冯·诺依曼(John von Neumann)对世界上第一台电子计算机ENIAC(电子数字积分计算机)的设计提出过建议,1945年3月他在共同讨论的基础上起草了一个全新的“存储程序通用电子计算机方案”——EDVAC(Electronic Discrete Variable Automatic Computer)。这对后来计算机的设计有决定性的影响,特别是确定计算机的结构,采用存储程序以及二进制编码等,一直为电子计算机设计者所遵循。 ↩︎