【问题标题】:How to represent java float as a binary literal?如何将 java float 表示为二进制文字?
【发布时间】:2021-12-04 21:27:03
【问题描述】:

我试图弄清楚浮点数和双精度数在 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 floating-point binary literals


    【解决方案1】:

    根据Java Language Specification,没有你想要的二进制浮点字面量。

    0b01000000101010011001100110011001int 文字,但有一种方法可以将此 int 转换为 float

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

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

    0b01000000101010011001100110011010
    

    使用它会打印 5.3。

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

    【讨论】:

      猜你喜欢
      • 2013-09-26
      • 2019-05-14
      • 1970-01-01
      • 2013-09-07
      • 2019-09-27
      • 1970-01-01
      • 1970-01-01
      • 2015-05-12
      • 2016-04-30
      相关资源
      最近更新 更多