一道计算机组成原理题目的总结
有一个字长
32位的浮点数,符号位1位;阶码 8 位,用移码表示;尾数 23 位,用补码表示,基为 2。请写出:(1)最大数的二进制表示;(2)最小数的二进制表示;(3)规格化数所能表示的数的范围。
首先注意,题目是使用了目前常用的32位浮点数的表示方法,即采用下图方式 
其中,S为符号位,E为阶码(8位),M为尾数(23位)。 由于未指明使用IEEE754标准,则设移码采用移128码。
最大数的二进制表示:
最大数即为最大的正数,故- 符号位
S为 0 - 阶码
E为1111 1111,实际指数值\(e=E-128=127\),则实际值为 \(2^{127}\) - 尾数
M为111 1111 1111 1111 1111 1111,即 \(1-2^{-23}\)
故最大数为
0 1111 1111 111 1111 1111 1111 1111 1111即 \((1-2^{-23})\times2^{127}\)- 符号位
最小数的二进制表示:
最小数即为最小的负数(绝对值最大的负数),故- 符号位
S为 1 - 阶码
E为1111 1111,实际指数值\(e=E-128=127\),则实际值为 \(2^{127}\) - 尾数
M为000 0000 0000 0000 0000 0000,配合符号位为1,得实际值为 -1
故最大数为
0 1111 1111 000 0000 0000 0000 0000 0000即 \(-1\times2^{127}\)- 符号位
尾数
M为000 0000 0000 0000 0000 0000,配合符号位为1,得实际值为 -1
关于上面这句话,应该这样理解:
虽然符号位S在表示的时候被放在了最前面,但是它本质上仍然可以认为是和尾数一体的,因为此时尾数才需要符号位。
- 对于正数,最大是
0 111 1111 1111 1111 1111 1111,最前面的0表示正号,小数点在第一个1左边,因此这个数的值为\(+(1-2^{-23})\) - 对于负数,我们知道,补码和原码、反码很大的一个不同点,就是将正零和负零统一了,以8位二进制表示为例,只保留
0000 0000为0,原来的负零分配到了负数的表示范围,作为最小的负数。因而在补码表示中,负数范围始终比正数多一个。而这个题中的000 0000 0000 0000 0000 0000,其实就是1 000 0000 0000 0000 0000 0000,最前面的1表示负号,小数点在第一个0右边,根据补码的计算方法,“按位取反再加一”之后,小数点前面进了一位,小数点后全为0,故最终值为 -1,这也是能表示的最小负数,也就是最小数。