在java中如何获得浮点的尾数?

在java中如何获得浮点的尾数?,java,Java,我正在尝试获取一个浮点的尾数(只是为了学习),但它没有按预期工作 比如说5.3的尾数是53,对吗?我尝试了以下代码: System.out.println(Float.floatToIntBits(5.3f) & 0x7FFFFF); 它打印了2726298。它不应该删除指数位并留下53吗?我尝试了很多事情,但这种情况总是发生。这里我做错了什么?IEEE标准下的单精度公式是: (-1)^sign + 1.Mantissa x 2^(Exponent - Bias) 因此5.3bas

我正在尝试获取一个浮点的尾数(只是为了学习),但它没有按预期工作


比如说5.3的尾数是53,对吗?我尝试了以下代码:

System.out.println(Float.floatToIntBits(5.3f) & 0x7FFFFF);

它打印了
2726298
。它不应该删除指数位并留下53吗?我尝试了很多事情,但这种情况总是发生。这里我做错了什么?

IEEE标准下的单精度公式是:

(-1)^sign + 1.Mantissa x 2^(Exponent - Bias)
因此
5.3
base 10是
101.010011001110011
base 2

101.010011001110011=1.010100110011*2^2

2^2=2^(exp-bias),偏差=127(根据IEEE单精度标准)
所以:exp-127=2=>exp=
129
base 10或
10000001
base 2

单精度工作台:

0 | 10000001 | 01010011001100110011001
符号=0
Exp=129
尾数=2726297

来自文章()获取尾数的最简单方法是:

public static double getMantissa(double x) {
    int exponent = Math.getExponent(x);
    return x / Math.pow(2, exponent);
}

IEEE浮点的指数基数是2,而不是10。“比如说5.3的尾数是53,对吗?”。错。它是二进制的,不是以10为基数的。你认为尾数是一个小数点——它是一个二进制的点…@user3580294你是什么意思?
5.3f
不是
5.3x10^1
。它是
0B0101001100110011010 x 2^10000001
(不知道这些是否是准确的值,但我认为我得到的是正确的大概值)嗯。。。看来我解释错了什么
Integer.toBinaryString(Float.floatToIntBits(5.3f))
打印
10000001010011001110011010
,并且它看起来与那里的指数不匹配。。。我错在哪里?如何确定偏差?如果它是由IEEE定义的,Java是IEEE兼容的,这不是一个问题吗?@user3580294偏差由IEEE标准确定,单精度(浮点)为127,双精度为1023Ah,Ok。有道理。@user3580294是的,我不小心翻转了Exp和Bias在公式中的位置