二进制中1的个数

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

在计算机中是使用二制数中的最高位表示来正负。 二进制的储存中都是用的补码.
正数的原码、反码和补码相同,
负数的原码是最高位为1,反码最高位不变,其余各位取反,补码为其反码+1

public class Solution {
	
	
    public int NumberOf1(int n) {
    	int k = 0;
    	if(n == 0) {
    		return 0;
    	}
    	else if(n > 0) {
    		
    		String str = Integer.toBinaryString(n);
    		for (int i = 0; i < str.length(); i++) {
				if(str.charAt(i) == '1') {
					k++;
				}
			}
    		
    		return k;
    	}
    	else {
    		StringBuffer str = new StringBuffer();
    		
    		for (int i = 0; i < 32; i++) {
				int t = (n & 0x80000000 >>> i) >>> (31 - i);
				str.append(t);
			}
    		
    		for (int i = 0; i < str.length(); i++) {
				if(str.charAt(i) == '1') {
					k++;
				}
			}
    		return k;
    	}
    }
    
    public static void main(String[] args) {
    	Solution s = new Solution();
	}
}
posted @ 2019-03-20 21:12  如是说  阅读(187)  评论(0编辑  收藏  举报