我不知道如何检查 double 是否是 2 的幂。到目前为止,这是我的代码:
double x = Double.longBitsToDouble(
Double.doubleToRawLongBits(n) & Double.doubleToRawLongBits(n - 1)
);
我使用以下公式来查找该数字是否为 2 的幂:
n & (n - 1) == 0
但它不起作用。
最佳答案
如果问题涉及非常大的数字,那么 Oleksandr 的答案会更好,但如果您确实想检查 double
是否是 2 的偶次幂,您只需检查尾数是否为为零:
(Double.doubleToLongBits(n) & 0x000fffffffffffffL) == 0
为了更加稳健,您需要处理非标准化数字的边缘情况(无穷大、NaN、非正规数,或许还需要决定零是否应该返回 true),但这些通常是边缘情况。
关于java - 检查 double 是否是 2 的幂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43019644/