题目描述:输入一个整数,输出该数二进制表示中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 }