我必须承认在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填充了我的东西 - 我找不到办法做到这一点。
答案 0 :(得分:12)
我有一个我正在设置的整数 个人比特,我想 打印出等效的IEEE754 单精度浮点数。
答案 1 :(得分:9)
Substitutes for Missing C Constructs
Java编程的设计者 语言选择省略联盟 建造,因为有很多 更好的定义单一机制 能够表示的数据类型 各种类型的对象:子类型。一个 歧视联盟实际上只是一个 苍白模仿类层次结构。
包含示例。
答案 2 :(得分:5)
Java没有提供任何方法将值视为原始位级别上的另一个值 - 没有联合,没有像reinterpret_cast
那样。但是,对于将float
视为int
的特定情况,反之亦然,您可以使用java.lang.Float.floatToIntBits
和intBitsToFloat
方法。
答案 3 :(得分:4)
如果您有兴趣访问float的位级表示,java.lang.Double包含执行此操作的方法(doubleToLongBits等)
指针类型之间(或指针与它们的数字表示之间的联合)会在类型系统中打开漏洞,因此它是绝对不可能的。
答案 4 :(得分:3)