1、得到一个数的二进制形式的最后一个1
a&(-a)
比如: 12 二进制为: 0 1100 ,要求最后一个1的位置
-12 二进制为: 1 0100
12与-12相与 后:0000 0100
2、位操作统计二进制中 1 的个数
以 12 为例,我们计算其 a &= (a-1)的结果:
- 第一次:计算前:1100 计算后:1000
- 第二次:计算前:1000 计算后:0000
- 0 我们发现,没计算一次二进制中就少了一个 1,则我们可以通过下面方法去统计:
count = 0
while(a){
a = a & (a - 1);
count++;
}
a&