我正在尝试获取浮动的尾数(只是为了学习),但它没有按预期工作。
5.3的尾数是53,对吗?我试过这段代码:
System.out.println(Float.floatToIntBits(5.3f) & 0x7FFFFF);
打印2726298
。它不应该删除指数位并留下53?我尝试了很多东西,但总会发生这种情况。我在这里做错了什么?
答案 0 :(得分:9)
遵循IEEE标准的单精度公式为:
(-1)^sign + 1.Mantissa x 2^(Exponent - Bias)
所以5.3
base 10是101.0100110011001100110011
base 2
101.0100110011001100110011 = 1.010100110011001100110011 * 2 ^ 2
具有偏差= 127的 2 ^ 2 = 2 ^(exp - 偏差)(根据IEEE单精度标准)
so:exp - 127 = 2 => exp = 129
base 10或10000001
base 2
单精度表:
0 | 10000001 | 01010011001100110011001
Sign = 0
Exp = 129
尾数= 2726297
答案 1 :(得分:0)
在文章IBM: Java's new math. Floating-point numbers(in Russian)中,获取尾数的最简单方法是:
public static double getMantissa(double x) {
int exponent = Math.getExponent(x);
return x / Math.pow(2, exponent);
}