P231 2的幂

- 今天的题比较简单,经过观察可以发现2的整数幂的二进制表示都为单独的一个1

- 之前了解过如果x&(x-1)就可以消掉最右侧的1,消掉之后如果等于0,就表示只有一个1
- 0和有符号最小值属于特殊情况,直接判false(负数也不可能)
- 剩下的就是2的整数幂
1 |
|

这里再介绍一个位运算技巧
n & (-n)
其中 −n 是 n 的相反数,是一个负数。该位运算技巧可以直接获取 n 二进制表示的最低位的 1。
由于负数是按照补码规则在计算机中存储的,−n 的二进制表示为 n 的二进制表示的每一位取反再加上 1,
所以如果n是2的正整数,且n&(-n)=n,n是2的整数幂
1 |
|

另一种解法
当前环境下2的最大整数幂是2^30
如果n是2^30的约数就是
1 |
|
