二进制中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();
}
}