#include <stdio.h>
int check_power(unsigned int n)
{
/****************************************
* 如果n是2的幂,那么 (n-1)也就是其二进制全为1的数
*****************************************/
if (n
& (n-1))
{
return 1;
}
return 0;
}
unsigned
int get_next_power(unsigned int n)
{
unsigned int next =
n;
unsigned int flag = 0;
/***************************************
* 将n逐次右移1位,记录移动的次数,然后用1左移记录的次数
****************************************/
while(next)
{
next =
(next>>1);
flag++;
}
next = (1 << flag);
return (next);
}
int main()
{
unsigned int nMax =
0x00800000;
unsigned int ii = 1;
for(ii=1; ii<=nMax; ii++)
{
if
(check_power(ii))
{
printf("[%u => %u]\n", ii,
get_next_power(ii));
}
else
{
printf("[%u]\n",
ii);
}
}
return 0;
}
判断一个数是否是2的幂次方以及保留一个数的最高位的方法,布布扣,bubuko.com
原文地址:http://www.cnblogs.com/eric-geoffrey/p/3772588.html