Java 如何获取/设置浮点中的单个位?

Java 如何获取/设置浮点中的单个位?,java,floating-point,Java,Floating Point,我必须承认,在我所有的Java工作中,我从来没有遇到过需要Java联合(比如C联合,而不是SQL联合),我在这里找不到答案。不可否认,我在Java中的大部分工作都是在更高的抽象层次上进行的,而不是一点点的摆弄 我有一个整数,我正在为它设置各个位,我想打印出等效的IEEE754单精度浮点 在C语言中,我会做如下操作: union { int i; float f; } x; x.i = 0x27; printf ("%f\n", x.f); 我如何在Java中做类似的事情?在Ja

我必须承认,在我所有的Java工作中,我从来没有遇到过需要Java联合(比如C联合,而不是SQL联合),我在这里找不到答案。不可否认,我在Java中的大部分工作都是在更高的抽象层次上进行的,而不是一点点的摆弄

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

在C语言中,我会做如下操作:

union {
    int i;
    float f;
} x;
x.i = 0x27;
printf ("%f\n", x.f);
我如何在Java中做类似的事情?在Java中,是否可以将同一内存视为两种不同的数据类型

我确实在SO和其他地方搜索了“java union”,但它让我被SQL的东西淹没了——我找不到一种方法来实现这一点。

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


包括示例。

本主题的一些有用文章和常见问题解答包括:

我设置了一个整数 和我想要的单个位 打印出等效的IEEE754 单精度浮动


用于此。

Java没有提供任何方法将一个值作为原始位级别上的另一个值处理-没有联合,没有类似于重新解释转换的方法。但是,对于将
float
视为
int
或反之亦然的特殊情况,可以使用
java.lang.float.floatToIntBits
intBitsToFloat
方法。

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


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

是的,但是类层次结构在这里是不好的。我希望能够将其设置为一种类型,并将其作为另一种类型读取。一个类层次结构将迫使我设置它,并将其作为同一类型读取。让我们备份一下-有没有办法更改浮点中的一位?这就是我要找的。我希望能够设置(例如)浮点的位31、27、4和0,以查看它的值。int bits=float.floatToIntBits(浮动);/*在IEEE 754位向量中使用位运算符*/aFloat=Float.intBitsToFloat(位);问题是关于浮动操纵还是工会?这两个似乎没有任何关系。@skaffman,union将是我使用C的方式。我没有意识到Float类提供了原始位转换,-问题中的第二句可能更相关。Bang。这就是我想要的。我看到相反的是Float.floatToRawIntBits。现在我只需要Double/Long变量,但我假设,如果有,它将在Double类中。我会去找的。感谢堆。与联合的联系在于,它们允许多个数据类型存在于同一内存位置,提供了从一种类型到另一种类型的有效转换能力。Pax需要对int和float做类似的事情,并且来自C背景,自然会采用union方法,但在Java中找不到如何做到这一点。幸运的是,他的特殊场景是由标准库处理的。是的,我唯一的另一个想法是将int写入一个文件,并将其作为浮点读回。我很确定还有比这更好的办法。谢谢,伙计们,这再一次证明了它的价值。这是一个很好的例子,说明人们很容易陷入这样的陷阱:为了实现X,你必须做Y,然后问如何做Y,而不是如何实现X。啊,明白了。是的,这是一个相当迂回的问题,要实现一些简单的目标:)+1表示信息,尽管@MB刚刚击败了你。谢谢。这就完成了我的任务(稍后我会需要这双/长)。助教。