一、题目:
函数原型:bool isPowerOfTwo(int n)
二、思路:
根据题意,要判断一个数是否为2的幂。如果一个数是2的幂,那么该数的二进制表示中只有一个1。所以只需要将该数的二进制表示中的最低位1移除,判断剩下的是否为0。如果为0,则说明二进制中只有一个1;如果不为0,说明二进制中有多个1。
移除二进制中最低位的1的方法:
1.n&(n-1)移除最低位的1
假设n为
那么n-1为00000000 10000000 00000000 01111111
n&(n-1)为00000000 10000000 0000000 0000000(移除了最低位的1)
2.n&(-n)得到最低位的1(移除除了最低位1的其他所有1)
假设n为00000000 10000000 00000000 10000000
那么-n为10000000 10000000 00000000 10000000(原码)
11111111 01111111 11111111 10000000(补码)
n&(-n)为 00000000 00000000 00000000 10000000(补码)
00000000 00000000 00000000 10000000(原码)
三、代码:
代码1
bool isPowerOfTwo(int n) { if ((n & (n - 1)) == 0) return true; else return false; }
代码2
bool isPowerOfTwo(int n) { if ((n & (-n)) == n) return true; else return false; }