剑指offer:二进制中1的个数
题目
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
解题思路
用位运算解决,用1与n进行与运算,能够判断最右边一位数是否为1,若为1则count++
然后将n无符号右移,继续判断原第二位数,注意必须是无符号右移>>>,不能用带符号右移>>,因为负数用补码表示,若用符号右移则一直补1,造成无限循环
代码
1 public int NumberOf1(int n) { 2 int count = 0; 3 while(n!=0){ 4 if((n&1)==1){ 5 count++; 6 } 7 n = n>>>1; 8 } 9 return count; 10 }
keep positive and calm,then go on