输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
import java.util.ArrayList;
import java.util.List;
/**
*
* @author wms
* @desc 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
*
*/
public class OneOfNum {
public static void main(String[] args) {
System.out.println(getNumOf1(10));
}
public static int getNumOf1(int n) {
int k = 0;
if (n == 0) {
k = 0;
}
if (n < 0) {
k = getNum2(n);
}
if (n > 0) {
k = getNum1(n);
}
return k;
}
public static int getNum1(int n) {
int k = 0;
String string = Integer.toBinaryString(n);
for (int i = 0; i < string.length(); i++) {
if (string.charAt(i) == '1') {
k++;
}
}
return k;
}
// int 整形 占4个字节,32位
public static int getNum2(int a) {
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < 32; i++) {
int t = (a & 0x80000000 >>> i) >>> (31 - i);
buffer.append(t);
}
int k = 0;
for (int i = 0; i < buffer.length(); i++) {
if (buffer.charAt(i) == '1') {
k++;
}
}
return k;
}
}