剑指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     }

 

posted @ 2019-07-21 14:21  huanglf714  阅读(88)  评论(0编辑  收藏  举报