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的
    }
  • 相关阅读:
    实习第五十七天
    武汉第五十六天
    武汉第五十五天
    常用环境配置
    http 基本验证(nginx)
    nginx configuration
    docker run demo
    初识Hadoop
    大数据简介
    HDFS 存放策略
  • 原文地址:https://www.cnblogs.com/Ph-one/p/6472889.html
Copyright © 2011-2022 走看看