首页 > 解决方案 > 如何将 java float 表示为二进制文字?

问题描述

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

0 | 10000001 | 01010011001100110011001

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

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

我得到了输出1.0848567E9

如果我使用这个问题的方式将 5.3 表示为二进制

int intBits = Float.floatToIntBits(5.3F);
String binary = Integer.toBinaryString(intBits);
System.out.println(binary);

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

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

谢谢。

标签: javafloating-pointbinaryliterals

解决方案


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

0b01000000101010011001100110011001int文字,但有一种方法可以将其转换intfloat

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

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

0b01000000101010011001100110011010

使用它会打印 5.3。

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


推荐阅读