2.3.1_1 浮点数的表示
00:00
各位同学大家好。通过之前几个小节的学习,我们已经知道了定点数怎么在计算机里表示,包括定点整数和定点小数。从这个小节开始,我们要学习浮点数在计算机里的表示和运算。这个小节中我们先介绍浮点数如何表示,我们会介绍浮点数它有什么作用,还有一个基本的原理。另外考试中常考的一个问题是浮点数的规格化,之后我们还会简单的介绍浮点数的表示范围相关的问题,这方面的内容其实已经从考研大纲里边删除了,所以关于浮点数的表示范围,我们只做一个简要的了解。
00:38
好的,首先来看一下我们之前学习的定点数它有什么局限性?来看这样的一个故事,我现在的财富净值是负的8540块钱,那为什么是一个负值呢?因为今天刚好是我的蚂蚁花呗的还款日。我的这些财富,我的这些净资产,其实可以用一个两字节的short型短整型变量就可以表示。两个字节表示我的财富绰绰有余。但是虽然我很穷,然而我的贫穷又造就了有些人的富裕,比如说马爸爸,马爸爸他的财富有三千多个亿,那我们就随便写一个值。
01:16
后边这些数是我胡乱编的那你会发现他的这个财富,我们用一个四字节的int形变量都是表示不了的,已经超出了四字节定点整数所能表示的范围,所以我们只能用一个八字节的long形定点整数来表示它的这个财富,然而如果我们把这么多的人民币把它换成津巴布韦币,那一块钱的人民币差不多是约等于10的10次方这么多的津巴布韦币,所以把这些钱全部换成津巴布韦币的话,那八个字节的long型定点整数同样是表示不了的,所以我们在生活当中难免会遇到这种数字超级大的情况。
01:58
虽然这些数和我们都没有太大的关系,但是我们终归想要用计算机来表示这些数字,而我们的定点数定点整数和定点小数,在字节数固定的情况下,其实数字的表示范围是很有限的,但我们又不能无限制的来增加定点数的长度,就像刚才这个例子一样,两字节到4字节再到8字节,然后还要继续往上涨,这个就没完没了了。所以这就是定点数的局限性。
02:27
浮点数就是为了解决这样的一个问题。当我们表示数据的二进制位数不变的情况下,我们如何来增加数据的表示范围?这就是浮点数要解决的事情。计算机里的浮点数和我们小时候学习的科学计数法,他们的思想其实是相通的,所以我们会尝试着从大家熟悉的科学计数法来一步一步的往浮点数那边靠。我们还是看之前这个数字,我们如果采用科学计数法来记录这个数字,那可以把它记成正的3.026乘以10的1次方。当然这个地方我们省略了一些尾数,不过这些尾数的省略对于整体的数值来说其实影响不大,也就是五千多万而已,我们把它抛掉就可以。
03:13
好,那我们使用科学计数法来表示一个数的时候,其实这个底数十是不会变的,那既然这个底数一定是十固定不变,所以我们采用科学计数法记录这个数字的时候,不记录十也是ok的对吧?比如我们可以采用这样的形式,用前边的这三个位置表示我们十的多少次方,然后用后边的这五个位置有一个符号,然后四个数字来表示这个尾数到底是多少,那用这样的方式我们就不用再写这个底数到底是多少了。
03:48
好,我们不妨给这两个部分取两个名字。左边这个蓝色的部分我们把它称为阶码,就是表示这是十的多少次方。阶码由阶符还有数值部分组成,这个阶符为正的话就意味着我们需要把这个小数点往后移。如果阶符为负的话,是不是意味着我们需要把小数点往前移?这都是大家很熟悉的东西,而阶码的这数值部分又指明了我们的小数点要移动多少位。
04:18
好,这是阶码部分。右边这个部分我们给它取一个名字叫做尾数。尾数同样有一个正负的符号,这个符号表示了整个数值的一个正负性。然后后边这些数字我们把它称为尾数的数值部分,显然这个尾数的数值部分越短的话,那我们的科学计数法它能表示的数字精度就越低。精度越低。像刚才就是被我们舍弃了末尾的这些数,丧失了这些精度。那如果我们能够增加这个尾数的数值部分,再增加两个位57,那这样的话我们表示的数字精度是不是就上升了?
04:59
好,所以从科学计数法,如果我们把这堆钱换成津巴布韦币的话,很简单,我们只需要让阶码再加10,就可以在阶码和尾数的长度保持不变的情况下,我们采用这种方法来表示数字。它的表示范围增加了很多。阶码部分反映了数值的大小,而尾数部分反映了数值的精度,这个应该很好理解。好,这是大家熟悉的科学计数法,十进制的科学计数法。
05:31
现在我们来看一下在计算机里二进制的浮点数,它是什么一个原理。以前我们学了二进制的定点数,定点数的小数点位置是固定不变的。比如说用定点数表示的小数,一般来说我们会默认小数点固定在这个符号位的后面这个位置。那定点的整数我们会默认小数点固定在数值位的最后面这个位置,因为小数点的位置固定不变,所以我们才把它称为定点数。而浮点数就是小数点的位置是会浮动的那具体浮动多少其实就是看我们的阶码到底是多少。
06:11
用二进制表示的浮点数阶码通常会使用补码或者移码的方式来表示,并且阶码是一个定点整数,而尾数部分通常是用原码或者补码表示的定点小数。那一个二进制浮点数的真值应该怎么确定呢?用这样的一个式子就可以确定,同样的我们还是类比大家熟悉的时进制,科学计数法会更容易理解。
06:38
好,我们把这儿阶码的值为E,然后把这尾数的真值记为M,那二进制浮点数它的真值,我们就可以用R的E次方乘以M这样的方式来确定,这个地方的就是阶码的底数,我们通常会取2,就有点类似于十进制里边,我们把这个阶码的底数取为10,因为我们给定了一个十进制小数之后,这个小数乘以10的E这么多次方。那这就意味着要基于我们给出的小数来移动小数点,移动E这么多位。那具体是后移还是前移,其实就要看我们阶码的符号为正还是为负。
07:23
而对于二进制浮点数来说,我们把这阶码的底看作是2。那假设此时的阶码是1,然后再乘以我们给出的这个M,比如这个M是零点某某这样的一个数。那么这个定点小数乘以2的1这么多次方,是不是就意味着我们需要把这个尾数让它的小数点后移一位,或者换一种说法就是让这个尾数算数左移一位。好,所以这部分的内容我们来类比十进制科学计数法就会很好理解。
08:00
另外一点可以补充一下,就是我们这儿通常是默认阶码的底为二,但是除了二之外,其实也可以取二的2次方。这样比如说可以取4,可以取8。如果要类比十进制的话,类似于什么呢?我们十进制科学计数法当中,通常我们会默认这个底是十,对吧?但是我们也可以取10的2次方,也就是取100,或者十的3次方也就是取1000。那如果说阶码的底变成了10的2次方,也就是变成了100的话,是不是就意味着一的阶码会对应小数点后移两次?如果阶码为二,而阶码的底为100的话,那么就意味着小数点需要后移四位。
08:42
好,所以大家看课本的时候会发现,课本里面告诉我们这阶码的底也可以取4取8,这个原理大家可以和我们刚才提到的十进制科学计数法进行一个类比,当然了通常来说这个阶码都是2,很少会遇到其他的情况。接下来的讲解中如果没有特别强调,那我们就默认阶码的底就是2。
09:06
好,上一页PPT我们说过这个阶码E的值反映了浮点数的表示范围,还有小数点的实际位置反映了小数点的实际位置,这个很好理解。那怎么理解它反映了浮点数的表示范围呢?我们同样还是用十进制科学计数法来类比。假设我们规定这给出的十进制的阶码只能有两位两个数字,然后再加一个符号位。那这就意味着我们可以表示的这个十进制阶码的范围只能是0到99。所以当尾数确定的时候,我们所能表示的数,它最大的范围能到多少?就是乘以10的99次方,最多只能表示这么多,因为我们这个阶码规定不能超过两位。
09:58
回到二进制浮点数也是类似的,我们的阶码它的位数是固定的,它的值也只能表示某一个范围的数,而阶码的表示范围就反映了这个浮点数的表示范围。好,那第一句话应该理解了。第二句话尾数M的数值部分,它的位数N反映了浮点数的精度。这点是不是也和十进制一样?如果我们规定尾数的这个长度就只能有这么多个数字,那它所能表示的精度就是有限的。对于二进制浮点数来说也一样,尾数越长那么我们可以表示的经度肯定会越高,尾数越短那么精度就会越小。
10:39
好,总之对于二进制的浮点数来说,我们的尾数是用原码或者用补码表示的一个定点小数。它给出了一个小数,然后这个阶码的真值,阶码的真值又反映了我们在这个定点小数的基础上,小数点应该前移或者后移多少位。好,那接下来看一个题来练习一下。我们假设阶码和尾数在这个地方都是用补码的形式给出的,然后我们来求A和B这两个浮点数的真值。这儿我们用分号把阶码和尾数进行了一个分隔。然后阶码这个地方我们是用了一个小逗号来区分符号位。因为阶码一定是一个整数,所以我们使用逗号来分割。而尾数部分由于是一个小数,所以我们这儿用了一个小数点,小数点前边是符号位,小数点后边是数值位。
11:34
好,首先来看A这个浮点数,它的阶码是001,这是一个补码。我们把它翻译成对应的真值就应该是正一。再看它的尾数部分,这个尾数是用补码表示的定点小数。补码转原码大家现在应该已经很熟悉了,符号位保持不变,然后数值位权部取反,并且再在末尾加1,这就是尾数所对应的原码。如果我们用二进制表示,它的真值就应该是负的0.0111。这儿我们给每一位按照它的权值进行一个相加的操作。
12:12
好,所以基于浮点数的真值的一个确认的方式,我们知道A的真值应该是等于二的1次方,也就是二的阶码次方,再乘以它的尾数所表示的一个真值。那在尾数真实的基础上乘以2,是不是就相当于每一位的位权都乘了一个2,对吧?每一位的位权乘以2,这就相当于让小数点往后移了一位。或者换一种角度来说的话,就是相当于我们把尾数部分表示的定点小数给算术左移了一位。好,所以这就是A的真的值。当然我们这儿是用二进制表示,有兴趣的同学也可以把它翻译成十进制,是我们这就不做了。
12:56
好,如果说我们使用一个字节,也就是使用八个比特的空间来存储A这个浮点数的话,那么阶码占三位,然后尾数占后边的五位,刚好八个比特,是可以存得下A这个浮点数的。好,接下来看B这个浮点数,B的阶码010,这是一个补码,把它翻译成对应的真值应该是正的2。然后再看尾数,尾数同样是补码,只不过它是一个正值,所以我们可以直接得到它所对应的二进制表示的真值,是这样的一个形式。好,所以B这个浮点数的真值就应该是二的阶码次方乘以它的尾数所表示的一个真值。那乘以2的2次方就相当于算数左移了两位,或者也可以理解为是小数点后移了两位,所以与之对应的真值就应该是正的1.001,小数点后移两位到这个位置。
13:57
好,那还是刚才那个故事。如果说我们采用一个字节,也就是8比特的存储空间来存储B这个浮点数的话,那它的阶码占三位,但是它的尾数部分是占六位,所以最后这一位一我们存不下,只能把它抛弃。然而如果我们把最后这个一抛弃了的话,是不是就意味着B这浮点数它的精度就降低了?好,所以能不能把这个浮点数的表示进行优化,在存储空间不变的情况下,尽可能的多保留它的精度呢?这个问题就是所谓的浮点数尾数的规格化的问题。
14:40
什么叫规格化?我们同样从十进制的科学计数法出发,如果我们规定在这个科学计数法当中,我们只能用四个数字来表示尾数部分,那么上面这个数我们可以把它表示为正的3.026乘以10的11次方,可以表示为这样的形式。那也可以把它表示为下面这种形式,0.003乘10的正14次方。这两个数的区别就是我们损失了后边这几个位的精度,但是实际的数值相差的也不是特别大。那这个问题怎么处理?其实我们在小学初中的时候就已经知道了当我们采用科学计数法的时候,其实科学计数法会规我们尾数的最高位必须是一个有效值,也就是最高位不能是0。如果像下面这个例子,前面这些位都是零,那这些零其实是毫无意义的。
15:41
所以在尾数的长度规定只能用那么长的情况下,我们一定会尽可能的追求尾数的最高位。它是一个的有效值,不能是零。好,所以这就是十进制科学计数法的一个规格化。
15:57
好,现在我们把这种思想迁移到二进制的浮点数来看一下。对于B这个数来说,它的尾数部分0.01001,第一个零是符号位,我们必须保留。而小数点后面这一位它是零,相当于这是一个无效值,我们完全没有必要记录它。所以怎么处理呢?我们可以让这个尾数部分算数左移一位,或者也可以说是让小数点向右移一位,变成这样的一个值。尾数做了这样的处理之后,我们只需要让阶码的值减一就可以从原来的二变为一。
16:37
用这样的方式处理B的真值是保持不变的。然而由于我们逻辑左移了一位,抛弃了最高的这个无效数值位,所以最低位的这个空位我们就可以用来记录一这个数,这样我们就可以保证在这个浮点数的整体存储空间不变的情况下,尽可能的让它保留更多的精度。
17:00
好,所以刚才我们这种处理方法,我们把尾数算数左移了一位,然后阶码减1。处理完了之后,我们尾数的这个最高数值位现在是一个有效值。由于是算数左移,所以我们把这种处理方式称为左归。
17:16
通过算术左移来把这个浮点数进行规格化,称为左归。好,那既然有左归,是不是也会有对应的右归?那右归是什么意思呢?我们先来看十进制科学计数法,当我们对科学计数法的数进行加减乘除之类的运算之后,有可能会导致我们的尾数变成这样的形式。就是变成比如说302.6乘以10的9次方,有可能会变成这样的形式。
17:49
科学计数法会要求我们这小数点一定是在第一个非零的数值位的后面,一定要写在这样的一个位置。所以如果我们通过计算算出的数是这样的一种表示形式,我们就需要把这个尾数部分让它右移两位,或者换一种说法也可以理解为是小数点左移两位。好,为了和计算机的处理保持一致,所以我们把它理解为小数点固定不变,然后这些尾数右移两位。
18:20
尾数右移两位之后,我们还需要让阶码加2,也就是从9变成11。好,所以把尾数右移,然后阶码的值往上加,这种规格化的方式我们把它称为右归。对应到二进制的浮点数也是类似的。左归的问题我们之前已经聊清楚了,右归的问题对应二进制的浮点数也是一样的。如果说我们在浮点数运算,什么加减乘除之类的运算的结果,在尾数部分出现了一个假溢出,那如果尾数我们采用双符号位这样的方式来表示的话,我们可以通过让尾数算数右移一位,阶码加一的方式来实现类似于刚才右归这样的一个操作。
19:08
好,还是来看一个右归的例子,现在有A和B这样的两个浮点数,它们的阶码和尾数都是用补码的形式来表示的,那由于A和B它们的阶码都是2,所以它们俩的真值应该是2的2次方,然后乘上各自的尾数。好,那现在要算A加B的话,我们是不是可以让他们尾数进行相加,然后加得的结果再统一的乘以2的2次方。好,所以两个尾数相加,我们可以得到这样的一个数,因为两个尾数的最高数值位都是1,所以1加1等于零会往高位进一个1,这就导致双符号位里边更低的这个位变为了1。那这种情况下说明发生了溢出,此时双符号位里面更高的这一位表示的是正确的,我们应该得到的一个正负性。好,所以当我们遇到这种问题的时候,我们就可以通过右归的方式来把这个浮点数进行一个规格化,就是让这个尾数整体右移一位。而新空出来的这个位置和我们之前保留的正确的这个符号位保持一致,也就是补0。
20:18
好在尾数右移之后,我们还需要把阶码加1。因为阶码反映的是在这个尾数的基础上,小数点要后移几位。所以从这个角度去理解就能知道为什么阶码要加1了。好,经过右归的操作之后,我们得到的这个尾数就是一个规格化的尾数,它的最高数值位是一个有效的值,此时的阶码为三,所以我们可以用八个比特的信息来存储A加B的值,这是阶码部分13,然后这是尾数部分0.1010。好,这是右归的例子,大家再体会一下。
20:58
好,通过这个例子大家应该也能够体会到,为什么我们之前讲溢出那个小节的时候,我们会强调说双符号位是最常被考察的。采用双符号位的这种方式来判断溢出的话,像刚才这种发生溢出的时候,我们其实是可以挽救的。最高的这个符号位反映了我们本应该得到的正确的一个符号,所以通过更高的这个符号位,我们就可以把这个数值进行一个恢复。这种溢出是可以挽救的。因此也正是因为双符号位可以挽救某一些溢出的情况,因此采用双符号位来判断溢出的方式也是现实当中最多被应用的。
21:41
好,这是浮点数的规格化问题。除了要保证尾数的最高数值位必须是一个有效值之外,在尾数经过左移或者右移之后,一定要注意阶码的值,也要配套进行减一或者加一的操作。好,那之前我们说过浮点数的尾数,我们通常会使用原码或者补码来进行表示。所以当我们采用原码或者采用补码来表示这个尾数的时候,这个尾数数值的最高位到底取多少它才能算是一个有效值?这个问题其实是有一些区别的。
22:18
我们先来看最简单的原码表示的尾数。很简单,用原码表示的尾数,我们只需要保证最高的这个数值位它是1就可以了。这和10进制的科学计数法,我们要保证最高数值位一定不等于零是一个道理。好,由于尾数它是定点小数,我们用原码表示,所以尾数部分所能表示的最大值就是零点,后面全都是一。然后最小值就规格化的尾数最小值就应该是0.1,然后后面全部是零,因此尾数所能表示的范围就是这样的一个范围。2分之1就是最小值的这个值,然后1减2的负N方就是这个值。那不熟悉的同学可以自己算一下。
23:03
好,接下来看负数。负数其实也是一样的,我们只不过是把符号位从零变成了一而已。因为采用的是原码,所以数值部分的解释方式和正数没有什么区别,因此原码表示的负数进行规格化。同样的我们只需要保证数值位的最高位是1就可以。当它是一个负数的时候,我们能够表示的最大值就是这样的一个值,最小值是这样的一个值,刚好是逆过来的,因为我们加一个负号,所以在负数区间内我们可以表示的范围是这样的一个范围。
23:36
同样的是从刚才这些推论来推出来的。好,这是原码很简单。接下来看补码,如果我们采用补码表示尾数的话,那首先对于正数来说,正数的补码和原码是一样的,对吧?我们要保证最高的这个数值是一个有效位,那只需要和原码一样,保证最高的数值位为1就可以。所以用补码表示的尾数,正数的一个最大值和最小值和原码也都是一致的,所能表示的范围也一致。
24:09
好,接下来不一样的来了,如果采用补码表示尾数,并且这个尾数是一个负数的时候,也就是符号位为一的时候,那为了让计算机处理起来方便,我们会规定这个数值位的最高位必须是零。只有满足这样的规定,用补码表示的尾数才是规格化的正规的一个尾数。所以用补码表示的尾数如果进行了规格化之后,我们必须保证符号位,还有最高的这个数值位是不一样的。当符号位为零的时候,最高的数值位必须为一。当符号位为一的时候,最高的数值位必须为零。这就是一个规定,大家不需要过度的纠结,为什么?因为这样的规定可以很方便的用计算机硬件来判断它是否已经规格化。好。
25:00
对于补码的复数来说,如果最高数值位必须为零,那么它所能表示的最大值就是1.0,后面全是一,然后它所能表示的最小值就应该是1.0,后面全部是零。这个大家可以自己琢磨一下,这儿我们就不再具体的分析。如果把这两个数把它转换成真值的话,那么就应该是分别对应于2分之1加上2的负N次方,然后总体再取一个负,然后这个的话就是一个负1,所以补码表示的尾数在负数区间内,它的一个表示范围就是这样的一个范围。当我们要确定这些真值的时候,一定需要先把补码转变成原码,然后再来进行转换。那如何转换这个问题我们之前练过很多次,这就不再赘述。好,总之这儿想强调的是,我们的尾数采用原码表示还是采用补码表示,这个问题会影响到我们规格化的规则。
26:03
来看一个简单的例子,假设有一个浮点数,它的阶码和尾数分别是四位和8位,这儿已经直接给出了。那这个例子当中阶码和尾数都是用补码表示的,我们应该如何对它进行规格化呢?首先阶码部分把它翻译一下,它应该是对应124,应该是对应六,正六这样的一个真值。好,再来看尾数部分,尾数部分它是用补码表示,并且是一个负数,像刚刚我们说过负数的补码,我们必须保证它的数值位最高位一定要是零,这样我们才能保证尾数可以尽可能多的表示一些精度。
26:44
好,那怎么进行规格化呢?很简单,只需要把这个尾数部分进行一个算术左移,那补码负数的算术左移直接在低位补0就可以。这儿也顺道回忆一下,补码负数的算术右移应该是高位补1。这个地方我们要进行规格化,只需要算数左移就可以。只需要算数左移三位,也就是让这个0到达小数点后面的位置,最终这个尾数会变成1.0100,让低位空出来的都是补0,这样的话我们就完成了对尾数的规格化。
27:22
由于我们是进行了左移的规格化,每左移一次阶码应该是减一,对吧?所以左移了三位,那么我们就需要让阶码减3,因此阶码需要从正六变成正三。所以规格化之后阶码应该是0011,好,这就是这个数的一个规格化。关于浮点数规格化相关的问题,大家还会在王道书的课后习题里面遇到,这儿就先讲这么多。
27:53
刚才我们说过,我们尾数它的表示范围其实是有限的那阶码的表示范围也是有限的。所以显然我们的浮点数,虽然它的表示范围会比同长度的定点数要大得多,但是它同样会有一个极限,如果超出了浮点数正数所能表示的最大范围,那么我们把这种现象称为正上溢,如果超出了负数所能表示的最大范围,那我们把它称为负上溢。而规格化之后的浮点数,它所能表示的小数其实也会有一个下限。那结合上面这个推论,规格化之后的尾数,它所能表示的正数的最小值只能到2分之1,如果用二进制表示的话就是0.1,最小只能表示这样的一个数。
28:42
好,现在如果说阶码阶码只能占三位,并且阶码用补码表示的话,那三位的补码整数所能表示的最小的一个数应该是-4,对吧?所以如果阶码只有三位,那么规格化之后的浮点数,它所能表示的最小的一个正数就应该是在0.1的基础上,小数点往前移四位,也就变成0.00001,这就是阶码只有三位的时候所能表示的最小的一个正数。所以如果我们想要表示的正数比这个值还要更小,是不是就表示不了了?那这种现象我们把它称为正下溢。
29:26
那与正下溢相对的还有一个叫做负下溢,就是指我们要表示的那个负数绝对值已经超出了我们所能表示的最小的范围,这就是负下溢。当我们遇到正下溢或者负下溢的情况,我们通常会把这种情况当做机器数的零来进行处理,因为他已经很小了。而如果出现之前所说的正上溢或者负上溢的情况,我们通常会抛出一个系统的异常,或者也可以说是中断,表明这个运算已经溢出了。好,所以这就是浮点数的表示范围相关的一个问题。这部分的内容其实已经从408考试大纲里面删除了,所以我们暂且只做这些简要的了解。
30:10
好的,这个小节当中我们学习了浮点数在计算机里面如何表示,分为阶码和尾数这样的两个部分。阶码相当于我们在科学计数法当中乘以十的多少次方,相当于这样的一个作用。而尾数相当于我们科学计数法当中前边的这个具体数值,尾数给出了具体数值,而阶码指明了我们的小数点需要前移或者后移多少位。由于计算机当中小数点是固定不变的,所以我们没办法让小数点来移动,我们只能让整体的数值进行左移或者右移,那数值的左移右移和小数点的左移右移刚好是相反的。
30:56
这些东西大家都可以串起来理解。阶码通常是采用补码或者移码表示,而尾数通常采用补码或者原码表示,这小节我们介绍的例子都是阶码尾数都用补码表示,而下小节我们会介绍阶码尾数用移码和原码表示的例子。
31:14
考试当中需要特别注意的是如何从一个浮点数来确定它的真值。这部分的内容结合科学计数法并不难理解。由于尾数部分的长度有限,所以为了让尾数尽可能多的保留我们想要的精度,因此我们就提出了所谓规格化的问题。这儿大家可以再回忆一下,需要特别注意的是,当我们用原码或者补码来表示尾数的时候,对于所谓规格化的尾数的定义是不一样的。原码表示的尾数,我们只需要保证最高位最高数值位是1就可以。而补码表示的尾数,我们需要保证尾数的最高数值位必须和尾数的符号位相反。因此在做题的时候也需要注意这样的区别。
32:00
最后我们还简单的聊了浮点数的表示范围这个问题。需要知道正上溢负上溢还有正下溢负下溢的一个意思,能有一个大概的印象就可以。好的,这个小节我们只是探讨了浮点数的基本思想。对于阶码尾数到底需要用多少位,各自需要用原码补码还是移码,这两个问题其实是很值得探究的。因为只有我们确定了一个标准,就是阶码尾数各自用什么码,各自取多少位。只有确定了这样的一这个标准之后,不同的计算机之间才可以进行浮点数数据的交换所。以下个小节我们会介绍IEEE754这样的一个标准。如果所有的计算机对于浮点数的解析都是基于这个标准,那么计算机之间对浮点数数据的交换和解析就不会出现问题,都会遵循一套统一的规则。