2021年9月13日00:02:54
原码
反码
补码

public class Solution {
    public int NumberOf1(int n) {
        if(n ==0) return 0;

        int num = 0;
        if(n > 0 ){
            while(n >0){
                if(n%2 == 1) num++;
                n = n/2;
            }
        }
        else{
            int[] nums = new int[32];
            n = -n;
            int k = 31;
            nums[0] = 1;
            while(n>0){
                nums[k] = n%2;
                n = n/2;
                k--;
            }
            for(int i=31; i>0;i--){
                if(nums[i] == 0) nums[i] = 1;
                else nums[i] = 0;
            }

            nums[31]++;
            int jin = 0;

            for(int i=31; i>0;i--){
                nums[i] = nums[i] + jin;
                if(nums[i]>1) {nums[i] = 0;jin = 1;}
                else jin = 0;
            }
            for(int i=31; i>=0;i--){
                if(nums[i] == 1) num ++;
            }
        }
        return num;
    }
}