求二进制中数的1的个数
思路1:
(1)正常思路是用数来与1与,如果是的话就是1,count++,将数向右移位直到0,但这样如果输入负数会给高位补1,那样会陷入循环(可以用>>>)
>>>是逻辑移位符,即使是负数向右移动也是补0.
(2)既然不能动数,那就动1,将数字向左移动,这种思路有几位就要移动几次
(3)还有一种思路是有几个1就移动几次,利用n&n-1,这样会使得最右边的1变成0,就相当于把左边的第一个1移动到最右边来,也就算做有一次1。如果最右边不是1,那就会向前面借1,直到借到为止,这样相与之后就会把原来最右边的1变成1,而其他1没有动,这样重复循环直到变成0,几次就可以看成有几次。
public class Solution {
public int NumberOf1(int n) {
int count =