位运算的一些操作
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)
-
n&(n-1)==0
-
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; } }