最新消息:

计算机编码|二进制

编程教程 少儿编程 2848浏览 0评论

讲计算机编码,首先必须得讲讲二进制。二进制是什么,计算机为什么采用二进制,接下来我们就回答这两个问题来聊一聊计算机中的二进制。

什么是二进制

什么是二进制,我们这样来讲。

我们知道古代的长城,两个烽火台是用点狼烟来通知敌人来了。但是假设现在他们不光要知道有敌人来,还想知道来了多少敌人,由此他们想了两个方法:

1、点火,灭火;点火,灭火;……,如此点了多少次,就表示有多少个敌人来了;

2、有多少敌人,就同时点多少堆火。

可是不管这两种方法中的哪一种,几个敌人好说,如果几十个,上百个,甚至上千个时,都有麻烦。用第一种方法,有可能点火灭火还没通知完,敌人就攻上来了;第二种方法,这个烽火台得要多大的地方才够呀。

 

那怎么办呢?后来他们想了个办法,把几堆柴禾(柴堆足够大,确保对方能够看到)按顺序一字排开后,每个位置的柴堆点火来表示不同的敌人数,假设如下方表格中的三堆柴禾,每堆柴禾的灭火状态表示为0,点火状态表示为1,他们进行了这样的约定:

计算机编码|二进制

0

没有火堆被点着,表示没有敌人来

计算机编码|二进制

1

点第一堆火,表示有1个敌人来了

计算机编码|二进制

2

点第二堆火,表示有2个敌人来了

计算机编码|二进制

3

点第一堆和第二堆火,表示有3个敌人来了

计算机编码|二进制

4

点第三堆火,表示有4个敌人来了

计算机编码|二进制

5

点第三堆和第一堆火,表示有5个敌人来了

计算机编码|二进制

6

点第三堆和第二堆火,表示有6个敌人来了

计算机编码|二进制

7

把三堆火同时点着,表示有7个敌人来了

所以这样一来,用三堆柴禾就可以最大表示出8个状态,可以表达的最大敌人数为7,以此类推,4堆火可以表示出16个状态,可以表达的最大敌人数为15。如下图: 

0000

0

1000

8

0001

1

1001

9

0010

2

1010

10

0011

3

1011

11

0100

4

1100

12

0101

5

1101

13

0110

6

1110

14

0111

7

1111

15

再以此类推,5堆火,可以表示出32个状态;6堆火,可以表示64个状态了……。我们算下,如果有16堆火的时候,可以表示出几个状态呢?大家可能已经找到规律了:

3堆火,8个状态:23 = 8

4堆火,16个状态:24 = 16

5堆火,32个状态:25 = 32

所以:

16堆火,总共可以有:216 =65536个状态

也就是说如果我们一字排开16堆柴禾,如果 65535(65535=65536-1)个之内的敌人来的时候,我们都可以用这16堆柴禾给表达出来。

 

当然啦,如上方表格中,16个状态的柴堆点火可不是随机点的,两个烽火台,他们为了能快速知道多少敌人时点哪几个柴堆,那么一定需要有规律。我们来观察一下上述表格:

状态3 = 状态2 + 状态1

即: 11   =   10  +  01

 

状态7 = 状态6 + 状态1 = 状态5 + 状态2

即: 111  =  110  +  001  =  101  +  010

 

而当状态3 + 状态1时,是否是状态4呢?

计算机编码|二进制

所以当我们用0和1表示数据时,如果进位规则是逢二进一,那么11+01 = 100,100即是状态4。其实这就是二进制啦。由以上叙述可知,二进制数据即是指用0和1两个符号来表示的数,且进位规则是逢二进一

 

为什么计算机用二进制

(1)技术实现简单:计算机是由逻辑电路组成,逻辑电路通常只有两个状态,电路的接通与断开,这两种状态正好可以用“1”和“0”表示。

(2)运算规则简易:两个二进制数和、积运算组合各有四种,运算规则简单,有利于简化计算机运算器的硬件结构。假如采用十进制,十进制的九九乘法就有55条公式,而二进制的乘法就四条规则:0×0=0、1×0=0、0×1=0、1×1=1。

(3)适合逻辑运算:二进制的0和1正好和逻辑代码假和真相对应,有逻辑代数的理论依据,用二进制表示真和假的二值逻辑很自然。

(4)易于进行转换,二进制与十进制数易于互相转换。这个转换有兴趣的朋友自行搜索啦,不再这里细述了。

(5)用二进制表示数据具有抗干扰能力强,可靠性高等优点。因为每位数据只有高低两个状态,或开关,或通断,所以即使受到一定的干扰时,仍能可靠地分辨出它是高是低,是开是关,是通是断。

 

计算机中是怎么二进制编码的

我们来假设一下,因某一个烽火台比较小,它同时放不下16堆火,只能生1堆火,但是敌人数量又有可能达到上万人,那怎么传递信息呢?可能有人已经想到了,我们可以用1堆火,比如约定10秒钟生灭一次,然后:

第一个10秒生灭了一次,表示为1;

第二个10秒没有点火,一直是灭,表示为0;

……

以此类推,160秒内,以开始到最后分别哪几个10秒内生火了,将这16个状态依次记录下来,我们就得到了一个16位的二进制数据了。

 

同时16堆火来表示一个数据的表示法,我们称之为并行。而隔10秒生灭一次火的方式来表达数据,我们称之为串行。由以上举例我们可知,并行的数据表示方法显然速度更快。

 

在计算机系统里,表达数据宽度的最小单位是“位”,即故事中的“一堆火”,如果同时能生16堆火,则表示数据宽度是16位的。平时我们说计算机是64位的,即可以并行处理64位数据,可表达的最大数据为:

264 - 1=18,446,744,073,709,551,615

 

64位数据,有时我们也会表达为8个字节,即8个位(bit)构成一个字节(byte)

1byte (字节)= 8 bit(位)

byte可简写为大写的“B”,bit可简写为小写的“b”。另外:

    1 KB (1千字节)= 210 B= 1024 B(字节)

    1 MB (1兆字节)= 210 KB= 1024 KB

    1 GB (1 G字节)= 210 MB= 1024 MB

    1 TB (1 T字节)= 210 GB= 1024 GB

由这组等式,大家可能已经知道了各类段子里的1024出于何处了,没错,计算机系统中的“1千”是1024,而不是1000,就是因为其数据是二进制表达的缘故:

210= 1024,即10位宽度的二进制数据1 111 111 111。

 

计算机编码|二进制

通过上面的叙述我们已经知道计算机中的数据是怎么表达的,这里可能有人有疑问了,那计算机上的字符又是如何来表示的呢,或者有人可能会问什么是字符?

您必须 登录 才能发表评论!