kri*_*hna 0 java bitwise-operators
我可以理解它使用逐位AND运算符,但它是如何工作的?
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long num1=sc.nextLong();
long count=(num1 & (num1- 1));
if(count == 0l) {
System.out.println("power of two");
}
}
Run Code Online (Sandbox Code Playgroud)
如果num是2的幂,num & (num1 -1)则为0,因为num-1将有1位num有0位,0位有num有1位.
如果num是2的幂,它有一个1位:
num 00..00100000000..00
num-1 00..00011111111..11
num & (num-1) 00..00000000000..00
Run Code Online (Sandbox Code Playgroud)
如果num不是2的幂,则至少有两个1位num.如果你检查它们中的第一个和最后一个,你得到:
num 00..001xx..xxx10..0
num-1 00.0001xx..xxx01..1
num & (num-1) 00.0001xx..xxx00..0
Run Code Online (Sandbox Code Playgroud)
所以num & (num-1)至少有1一点.