如何在java中有效地将double的最后32位归零?

如何在java中有效地将double的最后32位归零?,java,bit-manipulation,bit,Java,Bit Manipulation,Bit,在java中,如何才能尽可能有效地将double的最后32位归零?转换为long并屏蔽所需的位,转换回: long l = Double.doubleToLongBits(); l &= 0xFFFFFFFF00000000L; double truncated = Double.longBitsToDouble(l); 虽然我不确定你想通过这个来实现什么…试试这个 private static final long ZERO_OUT_LAST_32_BITS = 0xffffffff

在java中,如何才能尽可能有效地将double的最后32位归零?

转换为long并屏蔽所需的位,转换回:

long l = Double.doubleToLongBits();
l &= 0xFFFFFFFF00000000L;
double truncated = Double.longBitsToDouble(l);
虽然我不确定你想通过这个来实现什么…

试试这个

private static final long ZERO_OUT_LAST_32_BITS = 0xffffffff00000000L;

public static void main(String[] args) {
    double number = 2.5;

    long numberBits = Double.doubleToLongBits(number);
    double result = Double.longBitsToDouble(numberBits & ZERO_OUT_LAST_32_BITS);
}
它使用一个操作将double的二进制表示的最后32位归零


但是,请确保您确切地知道自己在做什么以及为什么要这样做-我至少希望在这样的代码旁边有一个解释性的注释。

为什么要将双精度的最后32位归零?
(x>>32)您不希望在双精度上这样做,因为双精度被编码为系数和指数。对double执行逐位运算不太可能得到预期的结果。根据值范围,缩放到浮点或将数字转换为定点可能有效。您可以始终执行
a=Double.longBitsToDouble(Double.doubleToLongBits(a)&0xFFFFFFFF00000000L)忽略我的最后一条评论…这个问题应该可以帮助您将双精度转换为位。这样,您可以使用一些位运算符,然后将其转换回double。