数学问题:
public static int flag(int n) {
int count=0;
while(n>0){
System.out.println(Integer.toBinaryString(n));
n=n&(n-1);
count++;
}
return count;
}
问:flag(2017)结果,count为多少?
思路:这个问题是对位进行操作,n&(n-1)代表什么?当我们没有思路时,我们就要按照程序在跑起来,首先拿出一张纸,算出2017的二进制和2016的二进制
2017:11111100001
2016:11111100000
进行与操作得到:2016:11111100000,接下来呢?
2016:11111100000
2015:11111011111
进行与操作,得到:11111000000
这时候我们就可以发现规律了,接下来每一次与操作,都会减少最后的的一个1
因此总共,需要进行7次与操作,结果为0,结果count等于7。
总结:其实我对位操作心里一直是犯怵的,原因可能就是我对位操作很陌生把。其实前一段时间刚刚对位操作进行了复习