我试图了解浮点的工作原理。当我运行此代码:
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
答案 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');