【计算机组成原理】2.1.1 进位计数制

2.1.1 进位计数制

*文章整理自王道公开课程《王道计算机考研 计算机组成原理》,文中时间节点与本节课程视频相对应。
课程重点详细勾画请WX搜索GZH:玄默冲虚
欢迎关注!

00:00

好的,那么从这个小节开始,我们会正式进入第二章的内容,我们会开始学习数据的表示和运算。通过第一章的学习,我们知道了现代的计算机大致上可以分为这样的五大部件:主存储器可以用来存放数据,而运算器可以对数据进行数学运算或者逻辑运算,所以我们那该死的求知欲告诉我们,接下来我们应该探究的问题是数据应该怎么在计算机当中表示,也就是如何用二进制来表示,另外一个问题就是运算器是怎么实现数据的这些算术和逻辑运算的,所以这就是这一章要探讨的两大主题。

00:41

这个小节我们首先要学习什么是进位计数制,我们平时使用的是十进制数,计算机能够识别的是二进制数,然后为了方便我们程序员来阅读或者记录,我们在计算机专业里边通常还会使用到8进制和16进制指数。这小节包含一些重要的考点,其实就是各种数字之间的转换。二进制、八进制、十六进制如何转换成十进制?还有十进制怎么来转换成二进制、八进制、十六进制。另外二八十六这三种进制数之间又有一些比较特殊的联系,所以这三种进制之间的转换我们会放在中间来单独的讲解,最后我们还会介绍两个简单的概念,分别是真值还有机器数的概念。

01:30

好,我们首先进入第一个话题,我们首先来看一下人类最古老最原始的一种技术方法。数字其实和人类的生产活动是息息相关的,在人类还处于原始部落阶段的时候,这个部落里的人出去摘果子,他们会用比如说画竖线或者画横线的方式来记录每一个人摘了多少个果子,那一条竖线就会对应一个苹果,这就是最原始的计数方式。

01:59

但是慢慢的人们发现这种计数方式的一个缺点,就是没办法记录苹果数量很多的情况。所以后来就有一些远古的祖先们发现了可以用不同的符号来表示不同的数量。比如我们可以用一个横线来表示这是五个苹果,而竖线每一条竖线表示的是一个苹果,所以八个苹果可以表示成这样的形式,而17个苹果就可以用三个横线加两条竖线来表示,所以这就是最原始的一种计数方式,不同的符号会反映不同的权重,横线的权重是5,竖线的权重是一。

02:42

基于这种思想所发明的最著名的一种计数方式就是罗马数字。在罗马数字中I可以表示一,然后V表示5,X表示10,LCDM分别表示不同的权值。所以我们现在也会经常使用到罗马数字,这样一数表示的是一,然后三数表示的是三四数表示的是4。当然了在中世纪之后,四的表示方式一般是写成一个I再加一个V这是表示4。然后如果要表示五的话,就是一个V因为V这个符号的权重就是五。另外比如说13是这么表示的,如果要表示1888,那么可以用这样的方式表示。

03:26

总之这种计数方式的一个基本思想就是不同的符号会反映不同的权重。我们要把这些符号转换成实际的数值,其实做的都是加法的操作。一个M表示的是1000,再加上一个D表示的是500,然后再加上三个C也就是分别加上111百,然后以此类推。

03:49

这种单纯用符号来反映权重的技术方法显然是存在缺点的。如果我们要表示的数字不断增大,那么我们就有可能需要发明更多的符号。比如想表示1万,那么我们可能会发明一个符号叫W你想表示10万,那可能还需要发明一个符号叫Y之类的那随着人类生产活动的发展,人类想要表示的数字会越来越大。采用罗马数字的这种技术方法就会产生很多的不方便。

04:21

后来聪明的古印度人发明了阿拉伯数字。是的,你没有看错,阿拉伯数字其实是古印度人发明的,只不过是由阿拉伯人传入欧洲,所以欧洲人以为是阿拉伯人发明的。那阿拉伯数字总共会有十种不同的符号,每一个符号会反映不同的权重,就是会代表不一样的实际数值。另外他们还发明了我们现在最常使用的十进制计数系统。这种计数方式除了会用符号来反映权重之外,符号它所在的位置也会反映权重。比如说975这样的一个十进制数,其实它的五这个数权重应该是乘以一个一,然后这个数应该是乘以10的权重,而九这个数要乘以100的权重。每一个数码位它所处的位置不同,那么它所表示的权重就不一样。那用中国古人的话来讲就是个十百这么几个位。

05:23

我们可以把各个数码位的权重换一种表示方式,个位其实是相当于它的权重是十的0次方,然后十位表示的是十的1次方,百位它的权重应该是十的2次方,好,以此类推。总之十进制的这种计数方式,我们会用每一个数码位,然后乘以这个数码位所对应的一个实际的权值,然后这些权值都是十的某次方,因此我们才把它叫做十进制。好,那975这个数它只是一个整数,如果还带小数,那其实原理也是类似的,每一个数码位它所在的位置不同,那么它的权值,它的权重也会不一样,就是最高位的这个小数,它的权值应该是十的负1次方,然后第二个小数应该是十的负2次方,以此类推。

06:17

好,可以看到这种十进制的技术方式和罗马技术方式的思想是不一样的,引入了乘法的思想,每个符号所表示的数值不一样,权重不一样。另外符号所在的位置也会直接的反映这个符号的权重,每一个符号它所处的这个位置所确定的权值权重,我们把这个东西称为位权,由位置确定的权重,所以叫位权。

06:47

可以开个脑洞可以想一下,为什么我们人类通常都习惯于使用十进制这种计数方法?其实很大一部分原因是人是拥有十根手指的。比如我们可以用这样的手势表示八这个数,然后用这样的手势表示10,总共有十根手指。在我小的时候,我会和院子里其他小伙伴打篮球,然后我们会派两个人来负责计分,其中一个人记住的是个位的分,那么当进球数量达到10个之后,是不是手指就不够用了,此时就需要另一个小伙伴伸出他的一根手指,用来表示这一波人进了十分,然后记录个位分数的这双小手是不是又可以恢复成零的状态,然后从零开始,1234567这样往上加。

07:37

好,总之由于我们人类只有十根手指,因此当我们在数数的时候,逢十进一这样的思想应该是最符合人类习惯的,所以这也是为什么叫十进制的原因。当我们进行加法的时候,每当加到10,那么就可以往高位进一个数。逢十进一。人类有十根手指,所以自然而然的能够想到逢十进一。这不禁让我想到,也许我们八进制的发明者是海绵宝宝。因为他只有8根手指,如果让他数数的话,肯定就是逢八进一会比较符合他的身体构造。

08:16

好,接下来我们把十进制的计数方式推广到R进制。首先我们要引入一个概念叫做基数。每一个数码位所用到的不同的符号的个数就是所谓的基数。比如说十进制在每一个数码位有可能用到的符号会有0、12一直到9,总共有十种符号。那对于一个R进制的数来说,它的基数就应该是R,也就是有可能会出现R种不一样的符号。

08:49

计算机世界当中通常使用到的是二进制、八进制和十六进制。对于二进制的数来说,每一个数码位只有可能出现两种符号,一种是零,另一种是一。对于八进制来说,每一个数码位有可能出现8种符号,分别是0到7。而对于16进制来说,每个数码位有可能出现16种符号,那么0到9这儿总共有十个我们常用的符号,如果还要再增加,还不够六个怎么办?我们用字母来代替,所以16进制数当中A这样的一个符号,其实它表示的是十这个数。然后B表示的是11,C表示的是12,一直到F表示的是15。

09:36

那我们上面这个式子其实就给出了各种进制转换成我们熟悉的十进制数的一个转换方式。比如说对于二进制数101.1来说,小数点前边的第一位它的权重应该是二的0次方,也就是二的0次方。然后这一位的数值是一,然后第二位是零,权重是二的1次方,第三位值是一,权重是二的2次方,然后还有小数点后的一位,这一位的权重应该是二的负1次方。好,所以把每个数码位的数值,还有这个数码位的一个位权进行相乘相加,就可以得到这个二进制数它所对应的十进制的数值。

10:24

那对于八进制来说也是一样的,小数点前的这个数是五,然后这个数的权值应该是R的0次方,所以这乘以8的0次方也就乘以1,小数点后的这一位数值是4,再乘以它的位权8的负1次方,那么就可以得到这个八进制数5.4,它所对应的十进制数值是5.5。十进制数我们自然不必多说,16进制数原理也是一样的,小数点前的这一位数值是五,位权是16的0次方。而另外小数点后的这一位是八,它的位权应该是16的负1次方,所以转换成与之对应的十进制同样也是5.5。

11:10

那来思考这样的一个问题,如果说这个八进制数5.4,这个八进制数加上八进制数1.4,那么这个加法的运算其实和10进制的运算是一样的,小数点后的这两位4加4等于8,但是需要注意,由于我们采用的是八进制,所以逢八应该进一,因此对于八进制来说,八进制的0.4加0.4应该是刚好等于1.0,逢八进一,小数点保留0,然后往整数位进一,整数位应该是5加1再加一就等于7,还没有到8,所以5.4加1.4应该是等于7.0。这个是基于八进制的一个加法。

11:58

对于16进制也是类似的,我们需要逢十六进一。比如说这个16进制数5.8加上一个16进制数加0.98,那么小数部分8加9应该是等于17,那十七可以表示为16加1,所以逢十六进一,因此应该往这个整数部分进一,然后小数部分只留下一,接下来是整数部分的加法计算,5加0加1应该是等于6,所以5.8这个16进制加上0.9这个16进制应该是等于6.1。我们要遵循逢十六进一的一个原则。

12:42

好,为了保证完整性,我们再来举一个二进制加法的简单的例子。这个二进制数101.1,加上另外一个二进制数加一个比如说1.1这样。那么小数部分1加1等于2,逢二进一,小数部分保留一个0,然后小数点前的这一位一加一再加刚才进的这个一,那么等于33,应该是等于2加1,所以逢二进一,我们需要再往更高位进一个一,然后这一位会留下一个一好,下一位一加上刚才进的这个一等于2,那逢二进一这一位保留0,往高位再进一个一好。接下来最高位的计算1加1等于2,那2211,因此这一位保留一个零,再往高位进一个一。因此这两个二进制数相加得到的结果就应该是1001.0,这就是所谓的二进制逢二进一。

13:50

十进制是最符合我们人类习惯的一种计数方式,而二进制是最适合用计算机来存储和处理的一种技术方式,因为我们只需要使用有两个稳定状态的物理器件,就可以表示二进制的零和一了。比如说之前介绍过的高电平、低电平,还有在电容当中我们可以用电荷的正负性来表示零和1。总之我们可以很方便的使用一些物理器件来表示零和一这样的两种状态。另外一个原因,0和1可以刚好对应逻辑值的假和真。一般零表示假,一表示真。这就可以很方便的用计算机来实现逻辑运算。

14:35

第三个原因,我们可以很方便的使用逻辑门电路来实现算术运算。跨考的同学可能不知道逻辑门电路是什么,这是一门叫做数字电路的课里边会学习的内容无所谓,反正逻辑门电路也是用来处理二进制的一个元器件,你只需要知道这个就好了。好,总之这就是为什么现在的计算机世界会使用二进制的一个原因。

15:01

除了二进制之外,在计算机世界里我们还经常会使用到8进制和16进制这两种计数方式和2进制能够比较好的进行一个对应。所以如果要给人类阅读计算机里边存储的一些数据的话,那我们把二进制转换成八进制或者16进制的表示方式会更方便一些。好的,刚才我们简单的介绍了如何把其他的进制数转换成十进制。本质上就是用我们这儿给出的这种算法。不同的数码位在不同的位置有不一样的位权。那么你用每一个数码位的值乘以它在这个位置的一个位置,然后再相乘相加,就可以轻松的转换成十进制。

15:47

好,由于这是一个很重要的考点,因此我们再来进行一个练习。比如说对于这个二进制数来说,把它转换成十进制,那可以看到这个二进制的K0位是0,然后K一位是1,K4,这个位是一,K7这个位也是一,而小数部分K负一这个是一,K负二也是一。所以我们只需要把数码位为一的这些部分进行一个相乘相加就可以了。那最终算得的结果应该是对应十进制的146.75。这个部分跨考的同学需要自己暂停来训练一下。

16:26

二进制想要转换成十进制还可以有一种方法。如果你能熟练的记住每一个二进制位它的权值是多少,那么转换是很方便的。二进制数的整数最低位的权值是应该是二的0次方,也就是一。然后第二位的权值应该是2,接下来第三位的全值应该是4、86、32、64、128。然后小数部分的最高位权值应该是0.5,接下来应该是0.25,再接下来应该是0.125。那我们再把这个二进制数和各个位的权值对应上。所以这个二进制数的实际数值应该是多少呢?就应该是128加上16,再加上2,再加上0.5,再加0.2,那么加得的结果也是146.75。

17:25

这是我个人比较喜欢的一种转换方法。我会先把各个位的位权按照顺序写下来,然后再把二进制制数给它对应上去。这样就不需要思考二的4次方到底是多少。好,所以大家可以记一下这个东西,每一位的位权分别是多少。这是二进制转换成十进制。八进制转换成十进制我们就不再赘述,反正就是用每一个数码位乘以这个位的位权,然后相乘相加,最终得到251.5这个八进所对应的十进制制数。

18:01

好,最后再来一个16进制A186.1。那么A这个字母它表示的其实是10,而E应该是14。大家可以自己数一下,最终转换成十进制应该是这样的一个值。对于计算机专业的同学,这些问题应该是很简单很熟悉的。而跨考的同学可以自己多动手练习一下,也可以自己给自己随便写一些数字,然后转换成十进制。好,这是任意进制转到10进制。

18:34

接下来我们来看二进制如何和8进制、16进制之间进行转换。比如说对于这样的一个二进制数,我们会发现八进制数它的基数R应该是等于8,也就是每一个数码位总共有可能出现8种不一样的情况。而二进制数每一位只有可能出现零或一这样的两种情况,如果我们把三个二进制位进行一个组合,那这三个二进制位有可能出现的情况就应该是2乘2乘以2,也就是等于8。这就和8进制有可能出现的八种情况能够对应上了。因此如果我们要把二进制转成八进制的话,其实很简单,我们只需要三个二进制位为一组,然后每一组转换成对应的八进制符号就可以,也就是0到7。

19:28

那对于上边给出的例子,我们每三个二进制数为一组。010这个二进制数表示的应该是2,000表示的是0,然后一一一表示的是7,那最高位只剩一个一。由于我们要保证是三位一组,所以我们会在前边补上两个0,凑足三位。那001对应的也是一这样的一个数值,而小数部分也是一样的,三位为一组,如果不够的话,最后面这一组我们可能会要补几个零,把它凑足三位。然后011对应8010对应的是2,可能还是会有跨考的同学不知道这个对应关系是怎么来的。

20:10

其实和之前是一样的原理,我们的二进制数011,它的最低位的位权应该是一,然后第二位的位权应该是2,第三位位权应该是4,所以这个二进制数转换成十进制就应该是2加1等于3,因此零一一对应的就是3,而111这个数它所对应的实际数值就应该是4加2再加1,所以应该对应七好。这是二进制到8进制的转换,而二进制和16进制的转换其实也是类似的,因为四个二进制数刚好可以表示出16种不一样的状态。因此每四位二进制为一组,每组转换成对应的16进制符号就可以了。

20:58

对于刚才这个数,每四位为一组,把它转换成16进制所对应的符号,我们重点来看一下1100的转换。1100,那么根据二进制数,这四位为一组,最低位的位全应该是一,其次是248。好,所以1100它的实际数值应该是8加4,也就是等于12。那么十6进制当中怎么表示12这个数呢?A是十,B是十一,C是12,所以可以用C这个字符来表示12,因此1100把它转换成对应的16进制符号就是C好,对于小数部分也是类似的,只不过我们在最后有可能需要补上几个0,要凑足四位一组,然后再进行转换。整数部分补零是补在头部,然后小数部分补零是补在尾部,这一点需要注意。

21:58

好,接下来看八进制到二进制的转换,其实原理和之前是一样的,只不过是一个逆向的过程,每一个八进制数最终应该可以转换成三位二进制,那么2所对应的二进制应该是0105所对应的二进制应该是1011所对应的二进制应该是001,然后小数点之后还有一个55,所对应的应该是101,所以这就是这个八进制数转换成二进制数的一个结果。

22:32

最后还有16进制转二进制也是一样的,A表示的是十这个数值,那么我们用四位的二进制表示十应该是1010。因为最低位是一,第二位的位全是248,那8加2刚好是等于10,因此十用二进制表示就应该是1010。那么E也是类似的,转换成二进制是1110。好,这些对于跨考的同学来说需要自己下去练习,这就不再赘述。这大家会注意到我们会会用一个括号然后写一个八的角标表示这是一个八进制数。然后同样的方式,一个括号写一个16的角标表示,这是16进制数。

23:16

除了这种书写方式之外,我们还会遇到其他的书写方式。比如二进制的表示,我们会看到一串1010,然后最后加一个B因为二进制是binary,所以结尾为B表示的是二进制,那16进制还会用H作为一个结尾,用这样的方式来表示。因为16进制的英文是这样的一个单词,是以H打头的,而十进制可以用D来表示,同样也是来自于它的英文。除此之外我们还经常会见到0X然后后面跟一串数字,这个0x其实也是表示说后面跟的这一串是一个16进制的数。因此大家在做题的时候,如果题目没有特别的说明这是什么进制,那就需要观察它的一个书写的方式,特别是以字母结尾的这种书写方式。

24:12

好,目前为止我们介绍了其他进制转换成十进制的方式,还有就是二进制、八进制、16进制之间的一个转换。接下来我们还要探讨一个问题,就是十进制如何转变为其他进制。比如75.3这是一个十进制数,那需要把它转换成其他进制,我们需要分为整数部分和小数部分来分别进行处理。

24:37

首先我们来处理整数部分。通过之前R进制和10进制相互对应的这个公式,我们可以知道用二进制来表示这个整数部分的话,那么应该是这样的一个值,这个值刚好就等于75。如果我们对整数部分的这个表达式统一的除以一个基数R的话,那么就可以得到这样的一个结果。

25:05

前面这个部分就是除法的商,而后边会得到一个余数K0来解释一下,我们把前边的这个部分记作一个,比如说就叫X。所以原本我们放在分子的这个部分,我们可以把它写成R乘以X然后再加上K0乘以R的0次方,而R的0次方应该是等于一,所以就是直接加上一个K零,好,现在对于R进制的这种计数方法来说,任何一个数码位的值应该是零到R减一这样的一个范围。也就是说K0的值肯定也是零到R减一这样的一个范围。因此上边这个除式,我们用RX加K0除以一个R我们得到的商应该是X,那么一相减得到的余数不就是K0吗?因为K0小于R所以它肯定是一个余数。这就是刚才这个结论的由来。

26:09

是因为我们任何一个数码为K肯定是小于R的,所以我们这么一除,最终得到的余数肯定是K0,那求得了K0是不是就意味着我们已经得知了这个用二进制数表示75的时候,最低的整数位是多少?已经得到这个整数位的值。

26:30

好,那接下来我们怎么得到K1的值呢?是不是也是一样的原理?我们用之前得到的这个商再除以一次R那么这次除法所得到的余数是不是就是K1,原理和之前是一样的。

26:45

好,因此我们基于这样的原理,我们把75转换成与之对应的二进制数。二进制的基数R等于2。所以首先75除以2,那么商是37,余数是一一。根据刚才的推论,这个余数一就是K0。接下来用刚才得到的这个商再除以2,那么得到商是十八,余数是一,那这个一对应的应该是K一的值。

27:16

好,继续往后是不是一样的?每一次用上一步得到的商再除以这个基数R用这样的方式一直到商为零为止,每一步除法得到的余数就对应了二进制数当中的一个数码位。先得到的余数是低位的,后得到的余数应该是处于高位的。当然了,如果我们做题的时候用这种写法的话,会很费纸张。所以我们一般会用短除法的方式,75除以2,那么得到三十七余一。然后37再除以2,得到十八余一。

27:53

而用这种短除法的记录方式会更直观一些。那么最初得到的这个余数就应该是K0,也就是低位,最后得到的这个余数应该是处于高位。由于每一步我们都会除以基数R并且我们会取余数作为最终的结果,因此这种方法叫做除积取余法。

28:16

好,所以刚才75这个十进制转换成与之对应的二进制应该是1001011从高到低当然也可以记录成这样的方式,用D表示十进制,用B表示二进制,那如果要把它转换成,比如说八进制是不是也是一样的,只不过我们把这儿的GR变成8就可以了,同样可以用除积取法把十进制转换成八进制。当然还有一种方式是你可以先把它转换成你最熟悉的二进制,然后二进制再转换成八进制。因为二转换成八很容易,之前我们说过。好的,这是对于整数部分的一个处理。

28:58

接下来看小数部分怎么处理,也就是我们这标蓝的这些部分,注意观察会发现小数部分的值0.3应该是可以表示成这样的一个式子,对这个式子乘以一个基数R可以得到这样的一个值,因此我们用小数部分乘以基数R然后得到的这个乘积结果的整数部分就是K负一的一个值,那接下来计算K负二是不是也是一样的?我们再对剩下的这些小数部分乘以基数R那么第二次的乘法所得到的整数部分是不是就是K负二的值?

29:39

好,所以0.3转换成二进制,那么基数R应该是等于2,0.3乘以二等于0.6。整数部分是0,然后小数部分是点6,所以这个整数部分对应的就是K负一。接下来根据刚才的推论,我们把刚才得到的小数部分再乘以2,那么得到1.2,因此整数部分一就应该是K-2。

30:04

好,以此类推。我们会发现用这样的方式进行几轮乘法之后,最后又回到了小数部分为0.6的情况,也就是说你还可以继续往下乘,然后得到更多的二进制,这其实意味着我们用十进制表示的0.3这个数,我们没办法用二进制数来精确的表示。那我们的转换过程就到此为止。我们的精度是精确到二进制数小数点后的123455个位,如果这个精度不够,你继续往后求的话,那么可想而知我们的0.3这个数用二进制来表示的话,应该是0.01001。然后后面又是010011001无限循环下去,只能不断的趋近0.3,不能无误差的表示0.3。

31:02

同样的,这儿的这种记录方式比较麻烦,需要写比较多的东西,我们可以把它改进一下,0.3乘以二等于0.6,然后这儿我们把它记录下第一个整数0,然后接下来0.6乘以2得1.2,记录下整数一,接下来用小数0.2再乘以2,以此类推。那我们最先得到的这个零应该是小数部分的高位,越靠后出现的应该是越低位。这个通过我们刚才的推理不难理解。由于这种方法,我们每一次会乘以奇数,最终会取整数的部分,所以这种方法叫做乘积取整法。

31:42

好,所以十进制转换成其他进制,我们需要分为整数部分和小数部分来分别进行处理。整数部分我们要用除积取余法,而小数部分我们用乘积取整法。如果大家能够熟练的记住,或者在稿纸上先提前写出每一个二进制位它所对应的这个位权是多少。

32:05

其实我们也可以用拼凑的方式把十进制转换成二进制。比如说对于260.75这样的一个数,我们先来看整数部分,260应该是等于256,再加上4,那么四应该是这个位置,所以整数部分很显然应该是100000100,这是整数部分。而小数部分是0.75,0.75刚好是等于0.5加0.25,所以小数部分应该是点11。好,所以用这种方式可以更快的把某一些十进制数转换成二进制。

32:45

第二个例子也是一样的,533.125。首先看整数部分,533的话应该是125,再加上一个二十一,那么21的话又可以用16再上5就可以,也就是再拼一个四合一,所以533这个十进制数转换成二进制肯定是1000010101,这是整数部分,小数部分点125,那刚好是二的负3次方,所以小数部分应该是001。所以这样的话,我们就快速的把十进制转换成了二进制。

33:26

如果说题目要求你把十进制转换成八进制或者16进制,你在熟悉这种方法之后,完全可以先转换成二进制,然后二进制再转成8进制或者六进制就会很方便。好,来试一下。比如把刚才这个转换成八进制,那么三位一组,101对应的应该是5,然后010对应的应该是2,000对应的应该是0。然后最后的这个一再补两个零,它所对应的八进制应该是一小数点后的三位,001对应的应该是八进制的一好。所以如果把它转换成八进制的话,1025.1。因此个人认为,如果说他给你的这些十进制数不是特别大的话,那么用这种拼拼凑凑的方法反而会转换的更快一些。我们不一定非要跟着课本上的方法来做好。

34:21

最后我们介绍两个简单的概念,真值和机器数。之前我们已经知道了十进制数转换成二进制,那么二进制可以很方便的保存到计算机里。但是如果这个十进制数还带正负怎么办呢?通常的解决方法是我们会增加一个标志位,符号位,用一个二进制的0或者1来表示正或者负。在之后的学习中,我们会学到什么?原码、反码、补码、移码,学习这些东西大家就知道怎么在计算机里来表示代有正负的这种数了。

34:59

这就引出了两个概念,真值和机器数。所谓的真值就是符合我们人类习惯的这种数字,而机器数是指数字实际存到计算机里的一种形式,我们需要把正负号进行一个数字化,把它变成对应的0或者1,这就是所谓增值和机器数的概念,简单有个了解就可以。好,这个小节的内容比较多,我们介绍了进位计数制。

35:30

我们介绍了所谓的R进制数是什么意思,所谓R进制数就是每个数码位有可能出现R种字符,然后逢二进一,把二进制数转换成对应的十进制数的转换方法很简单,我们只需要用每一个数码位乘以这个数码位所在的位置的一个位权,然后相乘相加就可以。

35:56

对于程序员来说,我们需要熟练的掌握二进制、八进制或者16进制的转换。每三个二进制位对应一个八进制位,每四个二进制位对应一个十六进制位。那如果说题目让你把16进制转换成八进制应该怎么办呢?你可以先把它转成二进制,然后再把二进制转成八进制,经过这样的一个中间步骤就可以。需要注意的是我们需要补位,因为我们转换的过程中是三位一组或者四位一组。如果说每一组凑不够这么多二进制数的话,我们就需要进行一个补位。对于整数部分我们通常是在高位进行补位,而对于小数部分我们通常是在低位进行补位。

36:41

这个小节的后半部分我们又介绍了十进制转换成二进制的一种转换方法,需要分为整数部分和小数部分来分别进行处理。整数部分的处理方法叫做除积取余法,每一步除以基数得到余数,然后先得到的余数应该是整数部分的低位。对于小数部分的处理使用的是乘积取整法,先算得的这个数位应该是小数的高位,这一点一定需要注意。除了课本上介绍的方法之外,如果大家能够熟练的写出各个位的位权,那么其实用拼凑的方法来进行转换也是很快的。当然这个取决于大家的个人习惯。那么这个小节的最后我们还介绍了真值和机器数的概念,这个简单的了解一下即可。

37:28

另外还有一点需要强调的是在用乘积取整法把小数部分转换成某进制的时候,有可能会遇到无法精确表示的情况。比如刚才我们举的0.3这例子。而对于某些十进制数,比如0.5或者0.725,对于这样的数,你只需要用乘积取整法,乘上几次,你就会发现你的小数部分变成了0.0。对于这样的数就说明我们可以用二进制来精确的表示。这一点也是选择题当中的高频考点。对于整数部分来说,我们肯定可以用二进制来精确表示,但是小数部分有可能无法精确表示。

38:12

好的,以上就是这个小节的全部内容,讲的比较细,也是为了照顾到跨考的同学,大家还是需要通过课后习题来进行巩固和练习,只有自己动手才能真正掌握这些方法,这个小节的结尾和大家分享一个好玩的小小东西,就是你知道中国古代其实就已经有二进制系统了,我们看一些电影或者电视剧会遇到一些什么神算子,对吧?先生要不要算上一卦?你的印堂发黑可能有凶兆。

38:41

很多算命先生都是基于周易的这个八卦系统来给人算命的。不知道大家有没有听过这样的一句话,叫做太极生两仪,两仪生四象,四象生八卦。那你会发现太极的阴和阳其实可以对应二进制的0和1,也就是这儿所谓的两仪可以把它对应上0和1,然后这儿的四项还有八卦,其实也是0101的组合,只不过八卦你得用三个二进制位来表示,然后四项你得用两个二进制位来表示。好,所以这是很有意思的一个东西,和我们的二进制系统有某些异曲同工之妙。好的,那基础不好的同学再好好消化一下。

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值