用最快的方法判断一个数是否2的n次方

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用最快的方法判断一个数是否2的n次方相关的知识,希望对你有一定的参考价值。

用最快的方法判断一个数是不是2的n次方例如: 2、4、8、16、32.............等。本人想到一个最笨的办法:[mw_shl_code=java,true]boolean check(int a) boolean flag = false; int temp = 2; while (true) temp = temp * 2; if (temp == a ) flag = true; break; else if(temp > a) break; return flag; [/mw_shl_code]同学想到一个很高效的办法:[mw_shl_code=java,true]boolean check(int a) return (a&(a-1)) == 0?true:false;[/mw_shl_code]求讨论。。。。。。。。。。。

如果一个数是2^n,说明这个二进制里面只有一个1。 a = (10000)ba-1 = (01111)ba&(a-1) = 0。如果一个数不是2^n,说明它的二进制里含有多一个1。 a = (1xxx100)ba-1=(1xxx011)b那么 a&(a-1)就是 (1xxx000)b,而不会为0。所以可以用这种方法判断一个数是不2^n。 参考技术A 这个题目更类似是脑筋急转弯了,如楼上两位所言,用二进制表数,只有只有一个1即可 参考技术B 如何判断一个数是不是2的n次幂
将2的幂次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1,并且1后面跟了n个0;
因此问题可以转化为判断1后面是否跟了n个0就可以了。
参考技术C n&(n-1) == 0即可

位运算判断一个数是否为2的n次方

 1 import java.util.Scanner;
 2 
 3 /**
 4  * 功能:用位运算,判断一个数是否为2的n次方。
 5  * 思路:用1做移位操作,然后判断移位后的值是否与给定的数相同。
 6  */
 7 public class Main3 {
 8 
 9     public boolean isPower(int n) {
10 
11         if (n < 1) {
12             return false;
13         }
14 
15         int m = 1;
16         while (m < n) {
17             m = m << 1;
18         }
19 
20         if (m == n) {
21             return true;
22         }
23 
24         return false;
25     }
26 
27     public static void main(String[] args) {
28 
29         Scanner scanner = new Scanner(System.in);
30         Main3 main3 = new Main3();
31 
32         while (scanner.hasNext()) {
33 
34             int n = scanner.nextInt();
35             System.out.println(main3.isPower(n));
36         }
37     }
38 }

 

以上是关于用最快的方法判断一个数是否2的n次方的主要内容,如果未能解决你的问题,请参考以下文章

位运算判断一个数是否为2的n次方

如何判断一个数是不是是2的n次方

面试题判断一个数是否为2的N次方---终极接法来啦

面试题判断一个数是否为2的N次方---终极接法来啦

怎么巧判断一个整数是不是是2的n次方幂

快速判断一个数是否是4的幂次方,若是,并判断出来是多少次方!