zoukankan      html  css  js  c++  java
  • 几种判断一个整数是否是2的n次方幂的方法

    1:简单除法
      int i = 128; //待判断的整数
      int count = 1; //待判断的整数是2的count次方
    while (i)
    {
    if (2 == i)
    {
    printf("YES: %d ",count);
    break;
    }
    if (0 == i%2)
    {
    i /= 2;
    count++;
    }
    else
    {
    printf("NO ");
    break;
    }
    }

    2:16进制中1有几个

    大家发现没有,凡是2的n次方的整数,它的二进制的所有位中都只有一个1,并且这个1肯定在最高位。既然这样的话,那么这个问题就变成了如何来计算二进制位中1的个数,对于这个计算算法,《编程之美——微软技术面试心得》这本书中讲了三种方法,都很精辟,这儿我贴出其中一种的判断方法,如下:
    int fuc(int i)
    {
      int count = 0;
      while(i)
      {
      count += i&0x01;
      i >>= 1;
      }
      if(count < 2)
      {
      printf("YES"); //若count = 0 或者 count =1,表明 i 是 2 的n次方
      }
      else
      {
      printf("NO");
      }  
    }

    最简单法:

    int fuc(int i)
    {
        return ((i > 0) && ((i & (i - 1)) == 0));//2的n次幂肯定是大于0的
    }
  • 相关阅读:
    传递函数笔记
    模糊控制算法详细讲解
    SDRAM学习笔记
    基于STM32的CRC校验说明
    如何把图片设置成24位图/8位图??
    C2MIF软件使用说明
    ROM和RAM的内存详细说明
    Logback配置
    Logback使用
    common-logging源码解析
  • 原文地址:https://www.cnblogs.com/Ph-one/p/6472889.html
Copyright © 2011-2022 走看看