如何尽可能有效地将java中的double的最后32位清零?
答案 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);
虽然我不确定你想要实现的目标......