计算机中数据的表示分为以下两种结构:
下面分别介绍定点数(Fixed-point Number)和浮点数(Floating-point Number)的表示方法:
1.定点数(即小数点位置固定)
介绍:定点小数是计算机处理的数值数据多带有小数,小数点在计算机中通常有两种表示方法,一种是约定所有数值数据的小数点隐含在某一个固定位置上,称为定点表示法,简称定点数。
以16位计算机为例,定点整数和定点小数的表示如下图:
但是在实际生活中,多数情况是有零有整的情况,比如9.35元,1.36kg,在这种情况下计算机的设计者的解决方法是通过改变小数点的默认位置来表示有零有整的值,用四位表示一个0-9的数,这时9.35在16位的机器中表示时,小数点的位置会在第七位和第八位之间,用0-3位表示数字5,用4-7表示数字3,如下图所示:
不难发现,16位的机器在定点整数表示时,可表示的范围为-2^15 到 +2^15,即-32768到+32768,共65535个数,精度为1;而在上图的表示方法中,我们能够表示的范围是-127.99到+127.99,共25597个数,精度为0.01。毫无疑问,这种方式浪费了我们的存储空间,究其原因是我们在表示一个0-9的数字时分配了4位,而在定点整数表示时4位可以表示16个数,而这里我们只能表示10个数(继续往祖坟上刨的说法请各位自行脑补)。此外,此处我们可以看到定点表示法的一个明显的不足,就是在数据位数固定的前提下,定点表示法的数值范围相对较小,很难同时表示两个数值相差很大的数。(例如在同一台16机器上同时存储4321和0.0001)这时我们就需要一种新的方法——浮点表示法。
2.浮点数(即小数点的位置通过科学计数法的方式浮动表示)
介绍:其中 e为定点整数的移码形式,M 为定点小数的补码形式,S 为数符
仍以16位的机器为例,符号位只需1位即可,0为正(+),1为负(-);还有15位用来表示尾数M和阶码e。而尾数和阶码则需要根据我们具体需要的数的精确度和数值范围来确定。
举个例子:
设机器数字长为24位,欲表示±3万的十进制数,试问在保证数的最大精度的前提下,除阶符、数符各取1位外,阶码、尾数各取几位?
尾数的长度影响数的精度,故在保证范围的前提下,除去符号位,剩下的位数全部给尾数位。2^14=16384 , 2^15=32768,故±3万的表示范围要求我们给阶码分配5位(注意S、M、e都为二进制数表示,且e需要1位的阶符位),再除去1位的符号位,剩下的18位全部给尾数,即为正解。