java - 在没有数学函数或对数函数的情况下查找数字是否是 2 的幂

标签 java

我想查看用户输入的数字是否为 2 的幂。

我的代码不起作用。

public class power_of_two
{  
    public static void main(String args[])  
    {  

        Scanner in=new Scanner(System.in);
        System.out.println("Enter the number : ");
        int num = in.nextInt();

        int other = 1;  
        if(((~num) & 1) == 1)  
        {  
            System.out.println("The number is a power of two");  
        }  
        else  
        {
            System.out.println("The number is a  NOT A power of two");  
        }
    }  
} 

告诉我如何求两个数的幂。
例如 8 是 2 的幂。
22 不是 2 的幂等。

最佳答案

您可以测试一个正整数 n 是否是 2 的幂,例如

(n & (n - 1)) == 0

如果 n 可以是非正数(即负数或零),您应该使用

(n > 0) && ((n & (n - 1)) == 0)

如果 n 真的是 2 的幂,那么在二进制中它看起来像:

10000000...

所以 n - 1 看起来像

01111111...

当我们 bitwise-AND他们:

  10000000...
& 01111111...
  -----------
  00000000...

现在,如果 n 不是 2 的幂,那么它的二进制表示除了前面的 1 之外还有一些其他的 1,这意味着两个 nn - 1 将具有相同的前导 1 位(因为如果二进制表示中某处还有另一个 1,则减 1 不可能关闭该位)。因此,如果 n 不是 2 的幂,则 & 操作不能产生 0,因为 & 将两个前导nn - 1 的位将产生 1 本身。这当然假设 n 是正数。

这在 "Fast algorithm to check if a positive number is a power of two" 中也有解释。在维基百科上。


快速健全性检查:

for (int i = 1; i <= 100; i++) {
    if ((i & (i - 1)) == 0)
        System.out.println(i);
}
1
2
4
8
16
32
64

关于java - 在没有数学函数或对数函数的情况下查找数字是否是 2 的幂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19383248/

相关文章:

java - JPA 双向未知列

java - 在java中关闭期间删除文件

java - ClassCastException : Proxy0 cannot be cast to interfaces. 患者

java - 使用 JAXB 解码 xml 文件

java - 如何在 SQL 中使用可选 WHERE 子句?

java - 使用 long 代替 int 会导致 java 中出现额外的溢出情况。为什么?

java - Hibernate 搜索 NoSuchMethodError

java - 用正则表达式解析 HTML?

java - Hadoop:错误:java.io.IOException:映射中的键类型不匹配:预期的 org.apache.hadoop.io.Text,收到 org.apache.hadoop.io.LongWritable

java - Bitshift - 需要帮助来理解代码