zoukankan      html  css  js  c++  java
  • 问题描述:判断一个整数 n 是否为 2 的幂次方

    一、2的幂次方的基本定义

    什么样的数为2的幂次方?例如2^0=1,2^1=2,2^2=4……,符合公式2^n(n>=0)的数称为2的幂次方。

    如何判断一个数是否为2的幂次方呢?基本思路:把一个数不断的除以2,得到商与余数,若余数等于1,则这个数必然不是;若余数大于1,则继续除以2,直到商等于1。若商等于1且余数为0,则这个数为2的幂次方。

    二、2的幂次方的判断方法

    1:把一个数不断的除以2,得到商与余数,若余数等于1,则这个数必然不是;若余数大于1,则继续除以2,直到商等于1。若商等于1且余数为0,则这个数为2的幂次方。代码如下: 1 /// <summary>

     1         /// <summary>
     2         /// 判断一个整数 n 是否为 2 的幂次方
     3         /// </summary>
     4         /// <param name="n">需要判断的整数n</param>
     5         /// <returns>true:整数n是2的幂次方;false:整数n不是2的幂次方</returns>
     6         static bool IsPower(int n)
     7         {
     8             while (true)
     9             {
    10                 //0是2^0
    11                 if (n == 0) return true;
    12 
    13                 int quotient = n / 2;//
    14                 int remainder = n % 2;//余数
    15 
    16                 //余数等于1,则这个数必然不是
    17                 if (remainder == 1) return false;
    18 
    19                 //商等于1且余数等于0,则这个数必然是
    20                 if (quotient == 1 && remainder == 0) return true;
    21 
    22                 n = n / 2;
    23             }
    24         }

    2: 把一个数n拆成二进制看待处理的,如果 n 是 2 的幂次方的话,那么 n 的二进制数的最高位是 1,后面的都是 0。如果我们把它减 1,则会导致最高位变成 0,其余全部变成 1。然后我们把 n 和 (n - 1)进行与操作,结果就会是 0。例如:16=1 0000,(1 0000 & 0 1111)=0。代码如下:

    1         /// <summary>
    2         /// 判断一个整数 n 是否为 2 的幂次方
    3         /// </summary>
    4         /// <param name="n">需要判断的整数n</param>
    5         /// <returns>true:整数n是2的幂次方;false:整数n不是2的幂次方</returns>
    6         static bool IsPower(int n)
    7         {
    8             return (n & (n - 1)) ==0;
    9         }

     三、总结

    从运算性能上来说,首选n & (n - 1)的判断方式,一行代码即可解决2的幂次方的判断。

  • 相关阅读:
    jqGrid基本使用
    模块熟悉
    正则表达式-精髓
    登录+购物车+信息保存
    输入打开文件
    python打印目录下的文件名
    进度条
    模块导入
    正则表达式
    函数笔记
  • 原文地址:https://www.cnblogs.com/dongweian/p/12513582.html
Copyright © 2011-2022 走看看