C的IEEE754浮点数格式

float

IEEE754 浮点数格式
f = (-1)^s _ M _ 2^E

s 代表符号位,M 代表尾数,E 代表指数

第一步

1
2
3
4
5
6
7
8
// 浮点数举例
float f = 9.625; // 在内存的存储
整数:9 = 1001 // 对应二进制的存储
小数: 0.625 * 2 = 1.25 //一直乘2取整,一直到小数部分为0
0.25 * 2 = 0.5
0.5 * 2 = 1.0
// 看的是整数上的数字,所以是0.625=.101
1001.101

第二步

1
2
3
4
5
6
1001.101 = (-1)^0 * 1.001101 * 2^3
// 小数点向左移了3位 → 指数 = 3
s: 0 , M: 去掉整数1, 001101 , E :加上偏移127, 130
130 的二进制是:10000010
尾数部分(23 位)
0011010000000000000000 // 去掉整数1
符号位 指数位(8 位) 尾数位(23 位)
0 10000010 0011010000000000000000

double

IEEE 754 双精度(double)浮点数格式

名称 位数
符号位 1
指数位 11
尾数位 52
合计 64

第一步:

正数: 符号位=0

第二步:
转换二进制

1
9.625 = 1001.101 = 1.001101 * 2^3

第三步:
指数(带偏移)

  • 实际指数:3
  • double 的偏移是: 1023
1
2
存储指数 = 1023 + 3 = 1026
1026 的二进制是:10000000010

第四步:
尾数
标准化后的是 1.001101
->尾数位只要去掉 1. , 补齐 52 位,

1
0011010000000000000000000000000000000000000000000000

第五步:拼接完整的 64 位

1
2
3
符号位:0
指数位:10000000010
尾数位:0011010000000000000000000000000000000000000000000000

分为八组

1
01000000 00100011 01000000 00000000 00000000 00000000 00000000 00000000