位运算的一些操作

位运算的一些操作:

n&(n-1)可以实现去除最低位的1

例如n为5 二进制为:0101 n-1就为4 对应二进制为:0100

两者相&为0100

 

n&(-n):获取n二进制表示的最低位1

由于负数是按照补码规则在计算机中存储的,-n 的二进制表示为 n 的二进制表示的每一位取反再加上 1

n为5 二进制:0101 -n:1011

n&(-n)为:0001

 

n&(n-1)的返回结果就是n去掉最低位的1后的值

n&(-n)返回的是n二进制表示的最低位1的值

例:

给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false

一个数为2的幂次方,说明这个数表示的二进制中只有一个1(也就是最高位1)

  1. n&(n-1)==0

  2. n&(-n)==n

 

class Solution {
    public boolean isPowerOfTwo(int n) {
         if((n&(n-1))==0 && n>0) return true;
         return false;
    }
}
class Solution {
    public boolean isPowerOfTwo(int n) {
         if((n&(-n))==n && n>0) return true;
         return false;
    }
}

 

 

 

posted @ 2021-05-31 15:35  nb小歪  阅读(61)  评论(0编辑  收藏  举报