import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param n int整型
* @return int整型
*/
public int NumberOf1 (int n) {
// write code here
// 定一个长度为32的数组
int[] arr = new int[32];
int temp = Math.abs(n);
int index = arr.length - 1;
while (temp > 0) {
arr[index] = temp % 2;
temp = temp / 2;
index --;
}
// 判断是否为负数
if (n < 0) {
arr[0] = 1;
// 进行反码, 符号位为1,其余各位取反;
for (int i = arr.length - 1; i > 0; i--) {
if (arr[i] == 0) {
arr[i] = 1;
} else {
arr[i] = 0;
}
}
int val = 1;
// 再进行补码,反码加1
for (int j = arr.length - 1; j > 0; j--) {
int sum = arr[j] + val;
if (sum > 1) {
arr[j] = sum % 2;
val = sum / 2;
} else {
arr[j] = sum;
val = 0;
}
}
}
// 获取1的个数
int count = 0;
for (int k = 0; k < arr.length; k++) {
if (arr[k] == 1) {
count ++;
}
}
return count;
}
}