当第一次看小数在计算机中的存储原理时发现卡在算出来的指数为什么要加上127这个问题上了,后面参考了几个篇类似的文章后终于解开疑惑了。
用32位float来说,首先,指数占8位,表示0-255之间的数值,为方便判断指数正负,我们就要用一个中间值127来辅助。比如,8位的指数在内存中存储的值是125,然后读取的时候125-127得到-2,这个-2就是真实的指数值,也就是说内存中存125就对应真实值-2,此时负号就体现出来了;再看正数,如,8位的指数在内存中存储的值是129,然后129-127得到2,2就是129对应的真实值。通过这种方式就可以方便存储数值为-127~128的指数。
接下来我们再看那些文章中举的例子得出的指数,比如19.625 = 10011.101 = 1.0011101 * 2^4,指数为4,这里的4其实就是指真实的指数值,然后4+127得到内存中存的值131,二进制为10000011,所以实际上真实值是4的指数在内存中是这么存的:10000011
总结:8位的指数内存值减去127就得到真实的指数值,反过来真实的指数值加上127就得内存值。