一道计算机组成原理题目的总结
有一个字长
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,这也是能表示的最小负数,也就是最小数。