题目如图:
- 要点:
- 如果
x=2^n
,那么x&(x-1)=0
- 如果 x=奇数, 那么
x&(x-1)=x-1
; - 如果 x=偶数,那么每一次减少
2^n
。- 其中n的规律主要体现在16 以下的数。
- 如果
比如:x=15;那么计算x=x&(x-1);
x的变化是:(箭头标示一次计算)
x=15 ---> x=14 ---> x=12 ---> x=8 --> x=0
- 对于超过16的数,我们可以将其分解
2^n+2^(n-1)+...
。
如果x=29
x=2^4+13
x=29-(要点2)-->2^4+(13-1)--->2^4+8-(要点1)-->2^4+0--(要点1)-->0
- 对于图中的题目就与上面所举的方法类似
9999=8192+1024+512+256+15
countx=8;