Java编程题:判断某一数字是否为2的幂次方

判断某一数字是否为2的幂次方

2的幂次方是:1是2的0次幂,2是2的1次幂,4是2的2次幂,......等等。

(1) 通过位运算判断2的幂次方

通过二进制来看2的幂次方。

2的0次幂是1,对应二进制:0000 0000 0000 0000 0000 0000 0000 0001

2的1次幂是2,对应二进制:0000 0000 0000 0000 0000 0000 0000 0010

2的2次幂是4,对应二进制:0000 0000 0000 0000 0000 0000 0000 0100

2的3次幂是8,对应二进制:0000 0000 0000 0000 0000 0000 0000 1000

以此类推.....

然后2的幂次方都满足一个特点:n&(n-1)等于0。

&运算符表示与运算,&运算特点:二进制运算,全1则为1,有0则为0。

举例:4&3

Java编程题:判断某一数字是否为2的幂次方_第1张图片

根据2的幂次方存在这种特点,则可以很快的判断,一个数字是否为2的幂次方。

public boolean isTwoPower(int n) {
    return n>0 && (n&(n-1)) == 0;
}

(2) 如何判断2的幂次方,对应的幂指数是奇偶数

2的奇数次幂与0x55555555进行与运算之后,计算结果为0。

Java编程题:判断某一数字是否为2的幂次方_第2张图片

2的偶数次幂与0x55555555进行与运算之后,计算结果为2的幂次方本身。

Java编程题:判断某一数字是否为2的幂次方_第3张图片

根据这一特性,在判断出某一数字是2的幂次方后,在判断该数与0x55555555的运算结果等不等于0即可,判断出幂的奇偶性。

代码实现:

public static boolean isTwoPower(int n) {
    return n>0 && (n&(n-1)) == 0 && (n&0x55555555) == 0;
}

综上,就是通过二进制的方式进行判断2的幂次方的方法。

 

 

 

你可能感兴趣的:(Java学习笔记,算法)