在 Java 中,Float 是 32 位单精度浮点数,遵循 IEEE 754 标准。下面从“结构、内存布局、示例、特殊值”几个方面说明它是如何表示的。
一个 float 占 4 字节(32 位),分为三部分:
| 1 位符号位 | 8 位指数位 | 23 位尾数位 |
| 部分 | 位数 | 说明 |
|---|---|---|
| 符号位 sign | 1 | 0 表示正数,1 表示负数 |
| 指数 exponent | 8 | 采用“偏移码”(bias = 127) |
| 尾数 mantissa | 23 | 实际值 = 1.尾数(规格化数) |
对于 规格化浮点数(最常见):
值 = (-1)^sign × (1 + mantissa) × 2^(exponent - 127)
其中:
mantissa 是 23 位二进制小数exponent 是 8 位无符号整数5.5 = 101.1(二进制)
1.011 × 2^2
10000001011 后面补 0 到 23 位0 10000001 01100000000000000000000
float f = 5.5f;
int bits = Float.floatToIntBits(f);
System.out.println(Integer.toBinaryString(bits));
或:
System.out.println(Integer.toHexString(Float.floatToRawIntBits(f)));
| 情况 | 指数 | 尾数 | 含义 |
|---|---|---|---|
| 0 | 0 | 0 | +0 / -0 |
| 非规格化数 | 0 | ≠0 | 极接近 0 的数 |
| 无穷大 | 255 | 0 | ±∞ |
| NaN | 255 | ≠0 | 非数字(如 0/0) |
示例:
Float.POSITIVE_INFINITY
Float.NEGATIVE_INFINITY
Float.NaN
float 不能精确表示很多十进制小数0.1f + 0.2f != 0.3f
float,用 BigDecimal如果你愿意,我也可以:
float 和 double免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。