先判断是不是只有一位是1,然后看模3的结果。如果模3为1,则true,如果模3为2则false;
classSolution{public:boolisPowerOfFour(int num){if(num <0)returnfalse;int t = num &(-num);if(num - t !=0)returnfalse;return num %3==1;}};
循环
classSolution{public:boolisPowerOfFour(int num){while(num && num %4==0){
num /=4;}return num ==1;}};4的次方数一定是2的次方数,但2的次方数不一定是4的次方数,通过4的次方数二进制可以
发现4的次方数二进制中1只出现在奇数位。因此可以通过于奇数位都是1,偶数为都是0的
数(1010101010101010101010101010101)进行与运算,结果仍为原来数。
classSolution{public:boolisPowerOfFour(int num){return num >0&&!(num &(num -1))&&(num &0x55555555)== num;}};