浮点数的二进制表示 基础知识: 十进制转十六进制; 十六进制转二进制; 了解: 目前C/C++编译器标准都遵照IEEE制定的浮点数表示法来进行float,double运算
这种结构是一种科学计数法,用符号、指数和尾数来表示,底数定为2——即把一个浮点数表示为尾数乘以 2 的指数次方再添上符号
下面是具体的规格: 符号位 阶码 尾数 长度 float 1 8 23 32 double 1 11 52 64 以下通过几个例子讲解浮点数如何转换为二进制数 例一: 已知:double类型 38414
求:其对应的二进制表示
分析:double类型共计64 位,折合 8字节
由最高到最低位分别是第 63、62、61、„„、0 位: 最高位 63位是符号位,1 表示该数为负,0 表示该数为正; 62-52位,一共 11 位是指数位; 51-0位,一共 52 位是尾数位
步骤:按照IEEE浮点数表示法,下面先把 38414
4转换为十六进制数
把整数部和小数部分开处理:整数部直接化十六进制:960E
小数的处理: 0
25*1+0
125*1+0
0625*0+„„ 实际上这永远算不完
这就是著名的浮点数精度问题
所以直到加上前面的整数部分算够 53位就行了
隐藏位技术:最高位的1 不写入内存(最终保留下来的还是52 位)
如果你够耐心,手工算到 53位那么因该是:38414
4(10)=1001011000001110
0110101010101010101010101010101010101(2) 科学记数法为:1
0010110000011100110101010101010101010101010101010101,右移了15 位,所以指数为15
或者可以如下理解: 1
00101100000111001101010101010101010101