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

pax*_*blo 6 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);
Run Code Online (Sandbox Code Playgroud)

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

我在SO和其他地方搜索了"java union",但是它用SQL填充了我 - 我找不到办法做到这一点.

Mic*_*rdt 12

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

使用intBitsToFloat().

  • 我还是很困惑......这与工会有什么关系? (3认同)
  • 与联合的连接是它们允许多个数据类型存在于同一内存位置,从而提供了从一种类型有效转换为另一种类型的能力.Pax需要使用int和float来做类似的事情,并且来自C背景,自然会落入联合方法 - 但是在Java中找不到如何做到这一点.幸运的是,他的特殊场景由标准库处理. (2认同)

ska*_*man 9

缺少C构造的替代品

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

包括示例.


Pav*_*aev 5

Java没有提供任何方法将值视为原始位级别的另一个值 - 没有工会,没有什么比这样reinterpret_cast.然而,用于治疗的你的具体情况floatint,反之亦然,你可以使用java.lang.Float.floatToIntBitsintBitsToFloat方法.