以单精度浮点数为例
IEEE754规定,s作为符号位,用0(正),1(负)表示,E作为阶码用移码表示(后面解释为什么用移码),M作为尾数,并规定最高位总为1,因此将1省略,简称隐藏位。
填坑。为什么将E作为移码表示?
首先明确一个概念,什么移码?移码(增码)是为了某个目的存在,是符号位取反的补码。
例: X=+1011 [X]移=11011
X=-1011 [X]移=00101
回到主题
单精度浮点数(32位),阶码(后面的用偏移阶码表示,其实在IEEE754表示单精度浮点数都是一个概念)8位,那么原来8位二进制数有符号二进制原码表示范围是-127~127,但是IEEE为了不在阶码中引入符号位,且8位偏移阶码(阶码中二进制数为无符号数)范围是1~254(为什么不包括0和255?后面说),因此引入偏移码(移码),在有符号位的二进制基础上加127,那么就有了偏移阶码范围0~254,但是0不合法,后面说,因此偏移阶码范围是1~254。 为什么是127呢??是不是很多人都有这个疑惑。 加上127不就从原来的二进制有符号转变为无符号了嘛。IEEE不就是为了不在阶码E中不引入符号位才加的127嘛。
填坑,为什么范围是1~254?
因为0用8位阶码用全0表示,255用8位阶码用全1。 出现全0,尾数M全0,符号位为0,为正0,符号位为1,为负0(IEEE754规定的浮点数有正0负0之分),偏移阶码出现全1,尾数M全0,符号位S为0,为正无穷大,符号位S为1,为负无穷大。 这就是为什么不把0和255放入偏移阶码范围中的原因。
我之前也在纠结这个问题,纠结在为什么是127不是128或者其他数,其实很简单,就是为了将有符号转换为无符号。 希望我这篇微博可以帮到还处于迷茫的小伙伴。