判断一个数是否是2的幂次方以及保留一个数的最高位的方法
#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;
}
posted on 2014-06-06 14:27 eric.geoffrey 阅读(257) 评论(0) 编辑 收藏 举报