java - 检查 double 是否是 2 的幂

标签 java

我不知道如何检查 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/

相关文章:

java - 使用 SeekBar 更新 Android 布局中的计算值

java - Java 对象中的 JSON 值

java - 如何使用 hibernate 正确迭代数据库记录

java - 在 GXT 中拖动时,拖动源中的值将被删除

java - 如何将 String 变量解析为 Java 中的任何数据类型?

java - 无法从 JTable 中的模型接收数据

当我运行 .jnlp 文件时,Java 镜像困惑

java - 违反 Google 政策通过 PayPal 按钮捐款?

java - 相同类型的通用多个参数

java - Amdatu token 提供商