天天看點

判斷一個數是否是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);

繼續閱讀