如何将 java float 表示为二进制文字?

How to represent java float as a binary literal?

我试图弄清楚 float 和 double 在 Java 中是如何工作的。 there说明我们可以将5.3表示为

0 | 10000001 | 01010011001100110011001

但是当我尝试将其写为二进制时 java 文字

float number = 0b01000000101010011001100110011001;
System.out.println(number);

我得到输出 1.0848567E9

如果我使用 this question

的方式将 5.3 表示为二进制
int intBits = Float.floatToIntBits(5.3F);
String binary = Integer.toBinaryString(intBits);
System.out.println(binary);

我得到一个完全令人困惑的结果 1000000101010011001100110011010,第一个位置是 1,我认为这意味着负号。

有人可以帮助我了解我做错了什么吗? 我可以使用二进制 java 文字来表示浮点数和双精度数吗?

谢谢。

根据Java Language Specification,没有您想要的形式的二进制浮点数。

0b01000000101010011001100110011001 是一个 int 文字,但是有一种方法可以将这个 int 转换为 float:

System.out.println(Float.intBitsToFloat(0b01000000101010011001100110011001));

这会打印 5.2999997,因为您的表述不是最准确的。更准确的是:

0b01000000101010011001100110011010

使用它会打印 5.3。

另请参阅工具 IEEE Floating Point Converter,您可以使用它来获取浮点数的二进制表示形式。