一、n-1發生了什么
①、二進制數 n 變成 n-1 后,如果最后一位是 0,將向前一位借 2,2-1=1。最后一位為1。如果前一位為0,將繼續向前一位借2,加上本身少掉的1.則變為1。一直遇到1。減為0.
所以 二進制 xxxx10000 - 1 = xxxx01111
②、n&n-1
按照上述 n=xxxx10000,n-1=xxxx01111
xxxx10000
& xxxx01111
-----------------------------------------
xxxx0000
可以看到將原來的最右邊的1變為0了。重復這個操作,每一次 n 最右邊的 1 少一個。從而統計 n 中的 1 的個數
二、n & n-1 的使用
1 public static int hammingWeight(int n) { 2 int count=0; 3 int t=n; 4 while(t!=0){ 5 t=t&(t-1); 6 count++; 7 } 8 return count; 9 }

我們知道n&(n-1)可以消除掉最低位的1,那么2的冪二進制位中只有一個1,因此我們只需判斷n&(n-1)==0即可。eg : 2、4、8、16、32 (都是只包含一個 1)
1 public class Solution { 2 public boolean isPowerOfTwo(int n) { 3 return (n&(n-1))==0&&n>0; 4 } 5 }
參考並摘自
https://blog.csdn.net/nwpu_geeker/article/details/79763511
https://blog.csdn.net/sunxianghuang/article/details/52071137
