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

use*_*927 -2 java bit-manipulation bit

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

Pet*_*ček 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);
}
Run Code Online (Sandbox Code Playgroud)

它通过使用二进制AND运算将双精度二进制表示的最后32位清零.

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


Dur*_*dal 5

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

long l = Double.doubleToLongBits();
l &= 0xFFFFFFFF00000000L;
double truncated = Double.longBitsToDouble(l);
Run Code Online (Sandbox Code Playgroud)

虽然我不确定你想要实现什么......