剑指offer-二进制中1的个数

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

思路:如果为整数直接计算,如果为负数,算其对应正数的,如果是负奇数与其对应正数1的个数之和等于二进制位数总和,如果是负偶数,与其对应正数1的个数之和等于二进制位数总和+1

ac代码:

 1 public class Solution {
 2     public int NumberOf1(int n) {
 3            int sum=0;
 4         if(n==-2147483648)
 5             return 1;
 6         boolean flag=false;
 7         if(n<0){
 8             flag=true;
 9             n=-n;
10         }
11         int num=n;
12         while(n>0)
13         {
14             if(n%2!=0){
15                 sum++;
16                 
17             }
18             n=n/2;
19         }
20         if(flag)
21         { if(num%2==0)
22             return 32-sum;
23         else
24             return 33-sum;
25         }else
26             return sum;
27     }
28 }
原文地址:https://www.cnblogs.com/llsq/p/8796220.html