使用Float.floatToIntBits()然后使用Integer.toBinaryString()导致结果混乱

时间:2018-08-01 08:10:47

标签: java floating-point

我试图了解浮点的工作原理。当我运行此代码:

float number = 3.0f;
int bits = Float.floatToIntBits(number);
System.out.println(Integer.toBinaryString(bits));

我得到:

1000000010000000000000000000000 

但是3的正确二进制格式应该是(根据this converter):

01000000010000000000000000000000

为什么这里的println不显示符号位(0)?

编辑:最初,我使用的是Long.toBinaryString而不是Integer.toBinaryString

我会得到这样的结果:

float number = -3.0f;
int bits = Float.floatToIntBits(number);
System.out.println(Long.toBinaryString(bits));

输出:

1111111111111111111111111111111111000000010000000000000000000000

但使用Integer.toBinaryString返回-3.0f的正确二进制格式:

11000000010000000000000000000000

2 个答案:

答案 0 :(得分:1)

Integer::toBinaryString最多不将零加到32位。

int x = 0b_000001;
System.out.println(Integer::toBinaryString(x));

结果是1,而不是000...0001。 (32位) 标题零被省略。

答案 1 :(得分:0)

这只需要一点格式化:

float number = 3.0f;
int bits = Float.floatToIntBits(number);
String representation = Integer.toBinaryString(bits);
representation = String.format("%32s", representation).replace(' ', '0');