import java.util.*;

public class Solution {
    public int NumberOf1(int n) {

        // 一些特殊情况的处理
        if (0 == n) {
            return 0;
        }

        // 首先,判断 n 是正整数还是负整数

        int rs = 0; // 定义一个整型变量,用于存放最终的返回结果
        int abs = Math.abs(n); // 取 n 的绝对值

        if (n > 0) { // 如果 n 为正整数
            while (abs != 0) {
                if (abs % 2 == 1) {
                    rs++;
                }
                abs /= 2;
            }
        } else { // 如果 n 为负整数
            StringBuffer sb = new StringBuffer("");
            while (abs != 0) {
                sb.append(abs % 2 == 0 ? 1 : 0);
                abs /= 2;
            }
            int len = sb.length(); // 获取 StringBuffer 的长度
            for (int i = 0; i < 32 - len; i++) {
                sb.append(1);
            }
            sb.reverse();
            String tmpStr = "00000000000000000000000000000001";
            int carryBit = 0;
            for (int i = sb.length() - 1; i > -1; i--) {
                int tmpValue = Integer.valueOf(sb.charAt(i) + "") + Integer.valueOf(tmpStr.charAt(i) + "") + carryBit;
                rs += (tmpValue % 2 == 1 ? 1 : 0);
                carryBit = tmpValue / 2;
            }
            if (carryBit != 0) {
                rs++;
            }
        }
        return rs;
    }
}