浮点数在c/c++以及java中的内存布局遵循IEEE标准的,首先看一下IEEE所规定的存储的方式:
| 符号位 | 指数位 | 小数部分 | 指数偏移量 | |
|---|---|---|---|---|
| 单精度浮点数 | 1 位[31] | 8位 [30-23] | 23位 [22-00] | 127 |
| 双精度浮点数 | 1 位[63] | 11 位[62-52] | 52 位[51-00] | 1023 |
解释一下,首先float变量按上述标准是4个字节,其中最高位为符号位,1代表此浮点数为负数,0代表正数,接下来的8位为指数位,范围0~255,,IEEE规定了一个偏移量127,指数位的值减去127为小数的偏移。低23位为小数部分,这23位是来描述浮点数的值,偏移为0的情况下,这23位数是一个浮点数的小数部分,也就是说位于小数点的右边。比如
0x3fc00000
符号位:0 ->说明是正数。 &nb

本文详细介绍了IEEE浮点数存储标准,包括float类型的4字节内存分配,符号位、指数位和小数位的含义。通过示例代码验证了存储规则,指出浮点数表示的不连续性和精度问题,如0.3无法被float精确表示。同时,讨论了将float转换为int时导致输出结果不符合预期的原因。
最低0.47元/天 解锁文章
2万+





