0%

一道计算机组成原理题目的总结

一道计算机组成原理题目的总结

有一个字长32位的浮点数,符号位1位;阶码 8 位,用移码表示;尾数 23 位,用补码表示,基为 2。请写出:(1)最大数的二进制表示;(2)最小数的二进制表示;(3)规格化数所能表示的数的范围。

首先注意,题目是使用了目前常用的32位浮点数的表示方法,即采用下图方式

其中,S为符号位,E为阶码(8位),M为尾数(23位)。 由于未指明使用IEEE754标准,则设移码采用移128码。

  1. 最大数的二进制表示:

    最大数即为最大的正数,故
    • 符号位S为 0
    • 阶码E1111 1111,实际指数值\(e=E-128=127\),则实际值为 \(2^{127}\)
    • 尾数M111 1111 1111 1111 1111 1111,即 \(1-2^{-23}\)

    故最大数为0 1111 1111 111 1111 1111 1111 1111 1111\((1-2^{-23})\times2^{127}\)

  2. 最小数的二进制表示:

    最小数即为最小的负数(绝对值最大的负数),故
    • 符号位S为 1
    • 阶码E1111 1111,实际指数值\(e=E-128=127\),则实际值为 \(2^{127}\)
    • 尾数M000 0000 0000 0000 0000 0000,配合符号位为1,得实际值为 -1

    故最大数为0 1111 1111 000 0000 0000 0000 0000 0000\(-1\times2^{127}\)

尾数M000 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,这也是能表示的最小负数,也就是最小数。