浮点数的存储规则是由国际标准IEEE(电气和电子工程协会)754制定的。
存储的公式如下:
(-1)^S * M * 2^E
其中S表示符号位,S为0,则为正数,S为1,为负数
M表示有效数字,大于等于1,小于2.
E表示指数位
具体怎样存储的了?
以十进制10.5为例子
10.5的二进制表示为1010.1
可以看到10.5为正数S存储为0,那么E和M存储的方式就不同了
M的有效数字应该为1.0101才对,为什么少了最前面的1,那是因为,存储有效数字时,第一位永远是1,所以就把它省略了,取出的时候会自动的在前面补1
在这里我是以float类型为例子的,E有8位,如果是double类型E就有11位
首先E是无符号整形(unsigned int)
但是E可以是负数,0.5就是2的-1次方,而E又是无符号整形,所以IEEE 754规定,存入内存的E的真实值必须加上一个中间值,对于8位的E加上127,对于11位的E加上1023
所以1010.1,E的真实值为3,3+127等于130,130的二进制就是1000 0010
(-1)^0 * 1.0101 * 2^3 = 10.5