单选题 32位字长的浮点数,其中阶码8位(含1位阶符),尾数24位(含1位数符),机器数采用补码表示,且尾数为规格化形式,则对应的最小正数为______。
  • A.2127(1-2-23)
  • B.2-129
  • C.2-128×2-23
  • D.2-127×2-23
【正确答案】 B
【答案解析】[解析] 见下表以及对表格的分析。
{{B}}最大数、最小数及规格化浮点数的二进制表示{{/B}}
最大数的二进制表示 01111111 011111111111111111111111 227-1×(1-2-23)
最小数的二进制表示 01111111 100000000000000000000000 227-1×(-1)
规格化最大正数 01111111 011111111111111111111111 227-1×(1-2-23)
规格化最小正数 10000000 010000000000000000000000 2-27×2-1
规格化最大负数 10000000 101111111111111111111111 -2-27×(2-1+2-23)
规格化最小负数 01111111 100000000000000000000000 227-1×(-1)
(1)最大数的二进制表示:首先要使得数最大,很明显前面2的XX次方必须是最大的,自然就想到01111111,后面的尾数也尽量离1最近,自然想到011111111111111111111111。
(2)最小数的二进制表示:首先要使得数最小,很明显前面2的XX次方必须是最大的,自然就想到01111111,后面的尾数也尽量离-1最近,因为越近和前面的指数乘起来就会越远离0。而补码又恰好可以取到-1,那就肯定是选择-1了,自然就想到100000000000000000000000。
(3)规格化形式范围其实和(1)(2)的情况类似讨论,这里只讲一个比较难理解的,即规格化最大负数。首先不考虑规格化的事情,要使得一个数是最大的负数,也就是离0越近越好,所以自然想到2的指数越小越好,既然是补码,自然就想到最小的数-128,所以阶码应该是10000000,尾数也应该离1最近,现在的离1最近就不能随便选了,因为是要选择满足规格化的前提下离1最近的数字。而规格化要求1/2≤|s|<1,所以s应当取得-1/2才是最理想的,但是-1/2不是规格化数,所以退一步,加一个最小的数,也就是2-23,得到所要的结论。
考生看完此总结,以后应当能马上写出任何位数以补码形式表示的规格化浮点数的范围,不是补码也没有关系,只要知道此X码能够表示数的范围就好了,思路都是一致的。