判断一个数是否4的整数次幂。
bool judge1(int x) { if( x &(x-1) ) return false; return x& 0x55555555; } bool judeg2(int x) { int iTmp; for(; x !=0; x = x >>2) { iTmp = x &3; /*查看最右侧的两个二进制数 , 只有最右侧的两个二进制数为"01",而且在这个"01"前没有数值,才是要找的数值;否则不是4的N次方的数值*/ switch(iTmp) { case 1: if ( iTmp = x ) /*如果iTmp为1的话,那么x在这个1前面不能再有数值,否则也不是我们要找的数*/ return true; case 0: continue; break; default: return false; } }
}
4的整数次幂的二进制数都为 100,10000,1000000
1的后面跟偶数个0
只有这种形式的二进制数才有 x & (x-1) 为0
0x55555555 二进制数为0101 0101....这种
刚好是奇数位上的位都为1, 有了 x&(x-1)的判断后 与0x55555555做与运算即可得出结果。