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; } |