对于二进制来说,原码指的就是这个数本身。
反码(One's compliment)指的是 按位取反
补码(Two's compliment)指的是 取反后加一
一个数的负数,就是它的补码。另外一个小技巧,可以用n&(~n+1),即一个数 和它本身的补码 做与运算,来提取第一个是1的bit位。所以可以简易的记成n&(-n)。
Given an integer, write a function to determine if it is a power of two.
class Solution {
public:
bool isPowerOfTwo(int n) {
if (n <= 0) return false;
return ((n&(-n))==n);
}
};