零.导言
浮点数在内存中的储存方式与整形在内存中的储存方式不同,其储存方式遵循IEEE 754标准,这也是当你使用%d打印浮点型数据会打印出奇怪的数据的根本原因。就让我们来看看浮点型数据是怎么储存的吧。
一.浮点数的存储格式
浮点数的存储格式可以表示为:
[ V = (-1)^S * M * 2^E ]
- ( S ) 是符号位,0表示(-1)^0,即正数;同理,1表示(-1)^1,即负数。
- ( M ) 是有效数字,由于范围在1到2之间,第一位恒为1,因此在存储时不保存第一位。
- ( E ) 是指数,表示浮点数的大小。其中32位浮点数的指数范围是0到255,64位浮点数的指数范围是0到2047
二.符号位
( S ) 是符号位,位于内存中的第一位,占1bit,就只有0或1两种形式,0表示正数;1表示负数。
三.有效数字
( M ) 是有效数字,位于内存中的最后一部分,占23bit/54bit,存储时不保存第一位,假如下图为有效数字部分的前八位:
10100000
它表示的其实是二进制的1.101(暂时不考虑指数部分),这八个数字数只是"1."后的小数部分而已。
四.指数
( E ) 是指数,紧挨符号位后面,位于2~9或2~12位,占8或11bit,有特色的计算机制:
存储时需要将E的真实值加上一个中间值,32位浮点数的中间值是127,64位浮点数的中间值是1023,就拿32位浮点数来举例:
比如:10000000 其实表示的是
10000000 = 00000001 + 01111111 = 00000001 + 127(十进制)
所以 10000000 表示的其实是 10^1 ,即十的一次方。
完