阅读程序1解析

f(x) 求二进制里1的个数。
g(x) 保留x的二进制里的最后一个1,而形成的新二进制数字。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/**************************************************************** 
 * Description: 2021_J_1
 * Author: Alex Li
 * Date: 2023-08-23 23:29:58
 * LastEditTime: 2023-08-23 23:36:20
****************************************************************/
#include <iostream>
using namespace std;

int n;
int a[1000];
//f函数是计算x在二进制下有多少个1
int f(int x)
{
    int ret = 0;
    for (; x; x &= x - 1) ret++;
    return ret;
}
//g是计算x最后一位1所代表的数字,位运算中符号位也参与运算。
int g(int x)
{
    return x & -x;
}

int main()
{
    cin >> n;
    for (int i = 0; i < n; i++) cin >> a[i];
    for (int i = 0; i < n; i++)
        cout << f(a[i]) + g(a[i]) << ' ';
    cout << endl;
    return 0;
}


Scroll to Top