怎么判断一个数是4的整数次幂

如何判断一个数是4的整数次幂
RT

------解决方案--------------------
bool fn(unsigned int x)
{
if ( x == 0 ) return false;
if ( x & (x - 1) ) return false;
return x & 0x55555555;
}
------解决方案--------------------
C/C++ code
!( x & (x - 1) )  && ( x%10 == 4 || x%10 == 6 )

------解决方案--------------------
我自己解释:

if ( x == 0 ) return false; //这句是排除为0的数

if ( x & (x - 1) ) return false; //这句是基于把两个数转化为二进制进行位与的运算。
//“4的整数次”这些数门有一个特点,所写的形式就是101010....
//这个特点就是其二进制是由1和0交替出现的
//这句也就是利用了这一特点,只有4的整数倍的数才会有x & (x - 1) 为假
//把为4的整数倍数的数减1然后所有二进制中的1变成0,0变成1
//然后再与这个数进行位与运算结果才是0.也就不返回false

return x & 0x55555555; //如果前面两句能通过,就已经证明了x是4的整数倍数。这句返回的就是那个数吧
//类型是bool 则返回值就是真了

------解决方案--------------------
4的N次幂应该是
1 //0次幂
100 //1次幂
10000 //2次幂
1000000 //3次幂
100000000 //4次幂
...
这种形式吧.
------解决方案--------------------
探讨
汗~~~~没有算。。。。

不过 道理应该还是没错的 也就是只有4的倍数减1和4的倍数进行位与运算才会有 x & (x - 1) 为假。