n&(n-1)位运算的妙用

 一、n-1发生了什么

当要将一个数减去1时,需要注意最低有效位。如果最低有效位为1,则变为0。如果是0,你就必须从高位“借”1。 因此,要逐一前往更高的位,将每个位从0改为1,直至找到1为止,并将这个1翻转成0。
所以 二进制 xxxx10000-1 = xxxx01111

②、n&n-1

n=xxxx10000,n-1=xxxx01111
xxxx10000
xxxx01111
xxxx00000
把n的二进制的最低位的1变成0
重复操作,有多少个1,这个操作就可以执行多少次。
也可以用(n&(n-1))==0 检查n是否为2的某次方

原文地址:https://www.cnblogs.com/hemengjita/p/12728750.html