首页 > 代码库 > 判断一个数是否是2的幂次方以及保留一个数的最高位的方法

判断一个数是否是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;
}