我们都知道,IEEE754规定32位的浮点数的表示由符号位S(1bit),解码部分E(8bit)和尾数部分M(23)组成。 关于阶码字段E:阶码采用了偏移值为127的移码表示,而对于M约定隐含小数点左边那个1,即尾数部分实际有效位不是23而是24,但在保存时只用了23位。对于阶码,为何不像其他一样采用补码表示,而是用移码来表示? 对于这个问题,我们先来复习一下移码,移码是对于某一个系列或集合的数使它们都映射到正数轴上去,即在数轴上把数都统一往右移动n位,使得所有的数都不为负数。这里我们有E=e+01111111,所以对于所有的E有E大于等于0。这里的话,由于E都不为负数,所以我们直接可以由移码的表示形式看出对应数值的大小(这里是把移码当做无符号数来比较大小的,而不必考虑符号,这里比用补码好多了,补码是要变换成原码再比较的)。其次,用移码表示的话,简化了对于“0”的判断,即当移码的各位都为0的话,那么该移码对应的数据是能够表示的数据中的最小值。此外, 用移码来表示阶码的话可以提高表示数据的精度。如果不是采用移码来表示阶码的话,那么当阶码就会出现负值,这样的话当需要把该数据转换成非阶码浮点数据时我们将就需要对尾数进行左移(做乘法运算),这样的话我们会发现最先移去的是尾数的高位,因此这种方法不利于数据的精度表示。而对于才用移码表示阶码的话,我们在转换时是做右移操作,这样最先移去的是最低位,这样比较好地保持了数据的精度。 所以,浮点数的表示的过程中我们使用的阶码是移码,而不是像其他一般数据采用补码表示。 |