天天看点

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

继续阅读