原理:
2的整数次幂且奇数位置1的数为4分整数次幂,此算法可以扩展到求(2^n)的整数次幂,对于8的整数次幂,只需要将N-2改为N-3即可,对于16的整数次幂,需要将mask<30>改成mask<28>并将N-2改成N-4.也就是,对于(2^n)的整数次幂,我们只需要改两个地方
1.将mask<30>中的30改成32位整形中(2^n)最大的幂二进制表示中最高有效位的位置
2.将N-2改成N-n
bool PowerOf4(unsigned int i)
{
if (i==0||(i&(i-1)))
//先判断是否是2的整数次幂
{
return false;
}
return i&Mask<30>::mask;
}
int main()
{
for (size_t i =0;i<32;++i)
{
unsigned int n = 1<<i;
if (PowerOf4(n))
{
cout<<n<<endl;
}
}
return 0;
}
/*
1
4
16
64
256
1024
4096
16384
65536
262144
1048576
4194304
16777216
67108864
268435456
1073741824
请按任意键继续. . .
*/