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

时间:2014-05-16 17:48:11

标签: java bit-manipulation bit

如何尽可能有效地将java中的double的最后32位清零?

2 个答案:

答案 0 :(得分:7)

试试这个。

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);
}

使用binary AND操作将双精度二进制表示的最后32位清零。

但是,请确保您确切知道自己在做什么以及为什么这样做 - 我至少会期待像这样的代码旁边的解释性评论。

答案 1 :(得分:5)

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

long l = Double.doubleToLongBits();
l &= 0xFFFFFFFF00000000L;
double truncated = Double.longBitsToDouble(l);

虽然我不确定你想要实现的目标......