The IEEE 754 Floating Point Format
最近碰到用十六进制数表示浮点小数的问题,本科没学好,现在是补习时间。
FP32(单精度浮点数)
- 第 31 bit 为符号位,0 表示正数,反之为负数,其读数值用 s 表示;
- 第 30~23 bit 共 8 bits 为指数,其读数值用 e 表示;
- 第 22~0 bit 共 23 bits 为分数,视为二进制纯小数,假定该小数的十进制值为 f;
S EEEEEEEE FFFFFFFFFFFFFFFFFFFFFFF 31 30 23 22 0
v = (-1)s × 2e-127 × 1.f
十进制浮点小数转 IEEE 754 格式的方法,以 −118.625 为例:
- 由于是负数,得 s = 1;
- 去符号后,将小数转为二进制数表示(整数部分除以 2 取整,小数部分乘以 2 取整)得 1110110.101;
- 将该二进制小数正规化,即将小数点向左(为正)或向右(为负)移动,直至形成 1.f 格式的数,得1.110110101×26,补齐 23 bit 从而得到 f = 11011010100000000000000;移动的位数加 127 即为 e,得 e = 133 = 10000101;
- 最后得到 IEEE 754 格式:1 10000101 11011010100000000000000 = 0xC2ED4000。
FP64(双精度浮点数)
- 第 63 bit 为符号位,0 表示正数,反之为负数,其读数值用 s 表示;
- 第 62~52 bit 共 11 bits 为指数,其读数值用 e 表示;
- 第 51~0 bit 共 52 bits 为分数,视为二进制纯小数,假定该小数的十进制值为 f;
S EEEEEEEEEEE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 63 62 52 51 0
v = (-1)s × 2e-1023 × 1.f
同理推导,不在赘述。
Tags: 计算机基础