二进制中1的个数

输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

重点掌握原码和补码的转换!!!

解题思路:对于正数使用模2取余法实现;对于负数先让它和2147483647(即:int类型下最大正数)与运算再按照正数的计算方法,最后加上一位符号位即可

代码如下:

 1 public class Solution {
 2     public int NumberOf1(int n) {
 3         if(n==0){
 4             return 0;
 5         }else if(n>0){
 6             int count = 0;
 7             while(n!=0){
 8                 if(n%2==1)
 9                     count++;
10                 n = n / 2;
11             }
12             return count;
13         }else{
14             int count = 0;
15             n = n & 2147483647;
16             while(n!=0){
17                 if(n%2==1)
18                     count++;
19                 n = n / 2;
20             }
21             return count+1;
22         }
23 
24     }
25 }

👀

posted @ 2019-12-27 11:07  hu啦啦啦  阅读(134)  评论(0编辑  收藏  举报