根据国际标准IEEE(电气和电子工程协会)754,任意一个二进制浮点数都可以表示以下的形式:
(-1)^S *M *2^E
(-1)^S表示符号位,当S=0,浮点数为正数:当S=1,浮点数为负数
M表示有效数字,大于等于1,小于等于2
2^E表示指数位
对于32的浮点数
1个比特位用于储存表示符号位的1或者0
8个比特位用于储存指数
23个比特位用于储存有效数字
例如-5.5可以表示为二进制-101.1,进一步表示为-1.011*2^2
注意0.5表示为二进制是0.1(即1*2^-1)
那么它的S存进去1,E存进去10000001(二进制),M存进去01100000000000000000000(011后面一共20个0)
注意:(1)由于有效数字的小数点的左边一位必定位1,因此可以直接省略
(2)根据规定,指数存进数据中要加上中间值(这个中间值是相对与数据中指数的储存位数)。如E+127的值存进8个比特位中(目的是确保存进去的数为正数,也就是说存进去的数为一个无符号数),即129的二进制序列存了进去。
那么他储存在内存中就是11000000101100000000000000000000
对于64位的浮点数
1个比特位用于储存符号位的数字
11个比特位用于储存指数
52个比特位用于储存有效数字
表示方法与32位类似
E从内存中取出来还可以分为3中情况:
当E为全0的时候,这个时候意味着这是一个非常小的浮点数,M不再加上正数部分的1而是表示为0.xxxxxxxxxxx……这样做是为了表示一个非常接近于0的数字
当E不全为0并且不全为1的时候,从中去出来的数据减去127(或1023)来表示指数
当E全为1的时候,并且有效数字M全为0,则该数字表示正(或负)无穷大