程序员的数学思维修炼(趣味解读)为啥要用二进制

既然人类从远古时代就开始使用十进制数了,为啥还要用二进制呢?二进制有什么优 势呢?下面我们一起走进二进制的世界。

1.3.1    人脑与电脑

通过人类的进化,以及人们长期的学习和训练,人脑的潜能可以被不断地发掘。吉尼 斯世界纪录中记纸牌记得最多的是一名英国人,他只需看一眼就能记住54副洗过的扑克牌  ( 一共有2808张牌) 。还有人能记住圆周率小数点后的42,905位数字!可见,人脑的潜能 是可以不断被挖掘的。

在生活中,人脑对很多事物都形成了条件反射,例如,对于数据10与9的大小,我们 可以直接反应出10比9大。不过,由于没有通过相应的运算,仅凭人脑直觉反应得出的结 果可能是不准确的。例如,对于像比较大的两个数99999999与100000000 ,要想看一眼就 得出哪一个数据更大,就变得不太可能了,即使得出结论,可能也会有错误。为什么呢? 这是因为数据的位数变多了,并且重复的数很多,人脑无法一下子反应出来。通常要数一 下有多少位数,然后才能进行判断。

计算机 (俗称的电脑) 却不一样,对于任何操作,电脑都需要经过相应的运算,然后 才能得出结果。不管是比较10与9 ,还是比较99999999与100000000 ,电脑都会按规定的算 法进行运算,最后得出相应的结果。而电脑一旦得出结果,其结果肯定是准确的!

在电脑中,使用二进制来保存数据和编写程序。为什么选用二进制,而不选用人类已 经熟练使用的十进制呢?

如果要让电脑使用十进制,首先,应该让电脑能识别出十进制中的10个数字。怎么识 别10个数字呢?通常的考虑是,可以通过元器件中电压的高低水平来分别标识10个数字。 假如最高电压为12V ,那么10个数字中,每个数码可以分配的电压区间为1.33V ,如图1-    27所示。

图1-27

从图1-27可知,每个数之间的电压间隔小,如果外界干扰造成电压大幅变化,数据就 不准确了 (如本来电压为1.33V ,可被识别为数字1 ,但是由于外界干扰,电压增加了   1V ,就变成2.33V了,这里距离2.67V更近,就可能被识别为数字2) 。还有一个最大的问 题,在硬件上要识别这10种状态,其电路结构将非常复杂。

当然,这里只是一种假设,实际应用中采用的是二进制。由于二进制数只有2个数

码,电路就很简单了,因为具有两种稳定状态的元件 (如晶体管的导通和截止,继电器的 接通和断开,电脉冲电平的高低等) 很容易被找到。

因此,在电脑中使用二进制主要有以下优点:

技术实现简单。电脑由逻辑电路组成,逻辑电路通常只有两个状态,开关的接通与断

开,这两种状态正好可以用“1”和“0”表示。

运算规则简单。两个二进制数的和、积运算组合分别有3种规则,相比十进制数的运 算规则来说非常简单 (十进制的九九乘法表就有81种规则) ,有利于简化计算机内部结 构,提高运算速度。

适合逻辑运算。逻辑代数是逻辑运算的理论依据,二进制只有两个数码,正好与逻辑 代数中的“真”和“假”相吻合。

易于进行转换。二进制数与十进制数、八进制数、十六进制数之间的转换很方便。

抗干扰能力强。用二进制表示数据具有抗干扰能力强、可靠性高等优点。因为每位数 据只有高低两个状态,当受到一定程度的干扰时,仍能可靠地分辨出它是高电平还是低电 平 (只分辨电平的高低,而不用识别具体电压值) 。

知道电脑用二进制数来存储后,再来看电脑就简单了。电脑保存的数据用电路的两种 状态表示,当数据很大时,只需要增加数据的位数就可以了。

当超大规模集成电路迅速发展起来后,电脑中就可以处理、存储海量数据信息了。并

且,由电脑保存的数据保存周期长,不易丢失、损坏。而由于人类的认知及人的记忆会随

时间出现遗忘等原因,要用人脑来存储、处理海量信息,就不太可能。

因此,很多人认为电脑比人脑强。其实,电脑本质上只能识别0和1这两种状态!而更 复杂的功能,则是由人类对0和1这两种状态进行各种组合而得到的。

1.3.2    二进制计数规则

二进制的计数规则非常简单,只需要记住以下3点就行了:

基数为2。

只有2个数码,即0和1。

逢2进1 ,借1当2。

如图1-20所示,十进制数可以由多位组成,从右向左分别为个位、十位、百位、千  位、万位… … ,与此类似,二进制数也可由多位组成,从右向左分别为1位、2位、4位、8 位、16位… … ,如图1-28所示。

图1-28

为什么称为1位、2位、4位、8位… … 呢?其实,这是从十进制角度来看二进制的各位 数得出的名称。根据二进制计数的规则,用二进制计数时,第一个数为0 ,第2个数为    1  (根据逢2进1的规则) ,接下来为10  (所以第2位就是“2位”) ,继续下来依次为11 、   100  (所以第3位就是4位) 、101 、110 、111 、1000 … …。

如表1-1所示是十进制数0~127用二进制表示的对应形式。从表1-1中可以看到,当十 进制数为0和1这两种情况时,可用1位二进制来表示这两种状态;当十进制数在7以内时, 可以使用3位二进制数来表示—— 随着十进制数的增大,对应的二进制数的位数也会增  多,在表1-1中表示到十进制数127时就需要7位二进制位来表示了。

1-1    十进制数0~127对应的二进制表示

1.3.3    简单的二进制运算规则

与十进制数的运算规则相比,二进制数的运算规则就简单多了。同样,二进制也可对 数据进行加、减、乘、除这些基本的算术运算,另外,二进制数据还可进行逻辑运算。有 关逻辑运算的内容需要另一个主题来介绍,下面先来看看二进制的算术运算是多么的简  单。

1 .加法

与十进制的加法相比,二进制的加法规则要简单得多。如果只考虑一位数相加的情

况,在十进制加法运算中,加数和被加数都有0~9共10种可能,因此,会产生100种可能 的情况 (即使根据加法交换律将重复的运算过滤掉,也会有55种情况) 。而二进制加法运 算中,加数和被加数都只有两种可能,因此,只会有以下4种情况:

根据加法交换律,将第2 、3种运算看作为一种运算,则二进制的加法运算就只有3种 情况了。3比55!二进制的加法运算规则是不是要简单得多!

对于多位数的二进制相加,其运算规则与十进制相同,仍然会有进位的情况,只是进 位时采用“逢2进1”的方式。例如,将十进制数25加上38 ,根据表1-1找出对应的二进制   数,即可列出如图1-29所示的十进制数与二进制数加法的竖式。

图1-29

在图1-29所示的两种进制的加法运算中,左侧的十进制运算是按“逢10进1”的方式进

位,右侧的二进制运算则是按“逢2进1”的方式进位。虽然是两种不同的数据表示方式,但 运算的结果是一致的 (十进制数65对应的二进制数为1000001) 。

2 .减法

二进制的减法运算规则也很简单,只有以下4种可能:

如图1-30所示为十进制和二进制减法的竖式,在运算时注意十进制是“借1当10” ,而 二进制则是“借1当2”。

图1-30

3 .乘法

十进制数的乘法运算需要按“九九乘法表”法则进行,而二进制乘法的规则就简单多

了,与加、减类似,也只有以下4种情况:

可以看出,只有当被乘数、乘数都为1时,结果才为1;当被乘数或乘数有一个为0

时,相乘的结果就为0。

另外,二进制的乘法运算可以很简单地转化为加法运算。首先看如图1-31所示的乘法 竖式,左边是十进制的乘法竖式,右边是二进制乘法竖式。

图1-31

从右侧的乘法竖式可看出,当乘数某位为0时,这一位与被乘数相乘时各位都为0 ,当 乘数某位为1时,这一位与被乘数相乘时得到的是被乘数对应的各位,只是需要将被乘数 向左移动相应的位数。这样,二进制数的乘法就可以很简单地转化为“加法与移位”。

4 .除法

除法是乘法的逆运算,既然二进制的乘法表只有4项,则其除法表也对应有如下4项 (其中除以0是无意义的) :

看看图1-31中乘法的逆运算,如图1-32所示。

图1-32

从图1-32中可看出,二进制的除法运算也可简单地转化为“减法与移位”操作。

可以看出,在二进制中,加、减、乘、除算法都可转换为加法运算。对于减法运算, 只需要将被减数设置为负数,就可将其转换为加法;对于乘法,则可使用“加法与移位”操 作来完成;对于除法,则可使用“减法与移位”操作来完成。

既然比较复杂的乘法和除法运算能简单地转化为加、减法和移位操作,因此,电脑中 就只需要设计一个加法器即可,这样就简化了电路设计。

1.3.4    二进制数的分解

在前面的二进制计数规则中曾说过,二进制数从右向左依次为1位、2位、4位、8        位… … ,这是指二进制数中各位的意义。虽然只有0和1这两个数码,但是其所处的位置不 同,表示数据的大小也不同。例如,有以下二进制数:

图片上传处理中...

这个二进制数共有4位,由3个1和1个0组成。同样的3个1 ,由于其处于不同的位置,

这些1所表示的大小也是不同的,其所处的位置称为权。按从右向左的顺序各位的含义如 下:

第1个1表示“1的个数”;

第2个1表示“2的个数”;

第3个0表示“4的个数”;

第4个1表示“8的个数”。

因此,二进制数1011由1个8 、0个4 、1个2 、1个1组成。按各位的权列出的算式如下:

从这种按权展开式可看出,每个位的“权”表现为2的幂次关系,即相邻两位相同数码 代表的值为2倍的关系 (从右向左看,第2位的1是第1位的1的2倍) 。

这种按权展开式可方便地将二进制数转换为十进制数。

1.3.5    十进制数转换为二进制数

将二进制数按权展开,就可以方便地将其转换为十进制数。那么,十进制数该怎么转 换成二进制数呢?

十进制整数转换为二进制整数通常采用“除2取余,逆序排列”法。

具体做法是:用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到 一个商和余数,如此进行,直到商为0时为止,然后把先得到的余数作为二进制数的低位 有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。

例如,将十进制数14转换为二进制数时,“除2取余”的转换过程如图1-33所示。

图1-33

通过图1-33所示的逐项除2取余方式,得到每次除以2的余数,最后将取得的余数按逆 序排列,即将十进制数14转换为二进制数1110 。将这个二进制数按权展开,又可得到十进 制数14。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

生活家小毛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值