// 编写一个函数，用于计算一个整数的二进制表示中1的个数及0的个数，并返回结果。
#include <iostream>
#include <bitset>

using namespace std;

// 1 的个数
int countOne(int n)
{

    int cnt = 0;
    int temp = 0;
    for (int i = 0; temp < n; i++)
    {
        temp = 1 << i;
        if ((n & temp) == temp)
            cnt++;
    }

    return cnt;
}

// 0 的个数
int countZero(int n)
{
    int cnt = 0;
    int temp = 0;
    for (int i = 0; temp < n; i++)
    {
        temp = 1 << i;
        if ((n | ~temp) == ~temp)
            cnt++;
    }

    if (temp > n)
        return cnt - 1;
    return cnt;
}

// 逆向打印函数
void print(int n)
{
    int temp = 0;
    for (int i = 0; temp < n; i++)
    {
        temp = 1 << i;
        if ((n & temp) == temp)
            cout << "1"
                 << " ";
        if ((n | ~temp) == ~temp)
            cout << "0"
                 << " ";
    }
    cout << endl;
}

int main()
{
    int x;
    cout << "请输入一个整数: ";
    cin >> x;
    cout << x << " 的二进制表示为: " << bitset<12>(x) << endl;
    cout << x << " 的我的二进制表示为: " << endl;
    print(x);
    cout << x << " 的二进制表示中 1 的个数为: " << countOne(x) << endl;
    cout << x << " 的二进制表示中 0 的个数为: " << countZero(x) << endl;

    return 0;
}