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的某次方

posted @ 2020-04-18 22:42  何梦吉他  阅读(413)  评论(0编辑  收藏  举报