• LeetCode 腾讯精选50题--2的幂


    在二进制中,2的幂的数字用二进制表示时只会有一位表示为1,其余都为0,基于这个前提,可以有两种方案:

      1. 做位移操作

      2. 与数值取反并与原数值做与操作,判断是否与原来的数值相同

    对于方案1,我的想法是对数值 n 先做一次右移的移位操作,然后在对右移后的数做左移操作,判断两次操作前后的数值是否相同,以下是代码:

     1 public boolean isPowerOfTwo(int n) {
     2 
     3         for(int i=0;i<32;i++){
     4             int temp = n >> i;
     5             int large =  temp << i;
     6             if(n != large){
     7                 return false;
     8             }
     9             if(temp == 1){
    10                 return true;
    11             }
    12         }
    13         return false;
    14     }

    对于方案2,就很简单了,做与操作就可以了,由于计算机中负数的二进制表示是先对正数按位取反,然后再加1实现的,所以对于 n & -n  如果n是2的幂,二进制表示中只有一位为1,设位置为k,-n 这是从低位开始,直到k之前的都是0,k之后的都为1,与操作后还是 n

    1  public boolean isPowerOfTwo2(int n){
    2 
    3         return (n > 0) && ((n & (-n)) == n);
    4     }
  • 相关阅读:
    为初学者解释下命名空间
    面向对象的思想
    SELECT查询结果集INSERT到数据表
    SQL Server事务
    Sql Server中的谓词和运算符
    SQL查询语句执行的逻辑顺序
    浏览器中的流
    CSS盒子模型
    ArcGIS提取水系并进行生态敏感性分析
    ENVI提取水系并进行生态敏感性分析
  • 原文地址:https://www.cnblogs.com/Kaithy-Rookie/p/11341866.html
Copyright © 2020-2023  润新知