如何获取/设置浮点数中的各个位?

时间:2009-08-21 07:32:36

标签: java floating-point

我必须承认在Java的所有工作中,我从来没有遇到过需要Java联盟(比如C联盟,而不是SQL联盟),我在SO上找不到答案。不可否认,我在Java中的大部分工作都是抽象的,而不是小小的。

我有一个整数,我正在设置单独的位,我想打印出等效的IEEE754单精度浮点数。

在C中,我会做类似的事情:

union {
    int i;
    float f;
} x;
x.i = 0x27;
printf ("%f\n", x.f);

我如何用Java做类似的事情?甚至可以将相同的内存视为Java中的两种不同数据类型吗?

我在SO和其他地方都搜索了“java union”,但它用SQL填充了我的东西 - 我找不到办法做到这一点。

5 个答案:

答案 0 :(得分:12)

  

我有一个我正在设置的整数   个人比特,我想   打印出等效的IEEE754   单精度浮点数。

使用intBitsToFloat()

答案 1 :(得分:9)

Substitutes for Missing C Constructs

  

Java编程的设计者   语言选择省略联盟   建造,因为有很多   更好的定义单一机制   能够表示的数据类型   各种类型的对象:子类型。一个   歧视联盟实际上只是一个   苍白模仿类层次结构。

包含示例。

答案 2 :(得分:5)

Java没有提供任何方法将值视为原始位级别上的另一个值 - 没有联合,没有像reinterpret_cast那样。但是,对于将float视为int的特定情况,反之亦然,您可以使用java.lang.Float.floatToIntBitsintBitsToFloat方法。

答案 3 :(得分:4)

如果您有兴趣访问float的位级表示,java.lang.Double包含执行此操作的方法(doubleToLongBits等)

指针类型之间(或指针与它们的数字表示之间的联合)会在类型系统中打开漏洞,因此它是绝对不可能的。

答案 4 :(得分:3)

一些有用的文章&对这个问题的常见问题是,

Union types in Java?

Substitutes for Missing C Constructs