#include
using namespace std;
int func(int x) {
int countx = 0;
while (x) {
countx++;
x = x & (x - 1);
}
return countx;
}
int main() {
int x = 9999;
int result = func(x);
cout<<result;
return 0;
}
这个函数的作用是计算输入整数 x 的二进制表示中有多少个 1

当使用除二取余法将整数 x = 9999 转化为二进制时,可以按照以下步骤进行:
初始化一个空字符串来保存二进制表示。
不断地将 x 除以 2,同时记录每次的余数。
将每次得到的余数转换为字符,并添加到字符串的开头。
当 x 等于 0 时,停止运算。
以下是每一步的详细计算过程:
初始字符串: ""
第一步:
x = 9999
余数:x % 2 = 9999 % 2 = 1
更新字符串: "1"
更新 x: x = x / 2 = 9999 / 2 = 4999
第二步:
x = 4999
余数:x % 2 = 4999 % 2 = 1
更新字符串: "11"
更新 x: x = x / 2 = 4999 / 2 = 2499
第三步:
x = 2499
余数:x % 2 = 2499 % 2 = 1
更新字符串: "111"
更新 x: x = x / 2 = 2499 / 2 = 1249
第四步:
x = 1249
余数:x % 2 = 1249 % 2 = 1
更新字符串: "1111"
更新 x: x = x / 2 = 1249 / 2 = 624
第五步:
x = 624
余数:x % 2 = 624 % 2 = 0
更新字符串: "01111"
更新 x: x = x / 2 = 624 / 2 = 312
第六步:
x = 312
余数:x % 2 = 312 % 2 = 0
更新字符串: "001111"
更新 x: x = x / 2 = 312 / 2 = 156
第七步:
x = 156
余数:x % 2 = 156 % 2 = 0
更新字符串: "0001111"
更新 x: x = x / 2 = 156 / 2 = 78
第八步:
x = 78
余数:x % 2 = 78 % 2 = 0
更新字符串: "00001111"
更新 x: x = x / 2 = 78 / 2 = 39
第九步:
x = 39
余数:x % 2 = 39 % 2 = 1
更新字符串: "100001111"
更新 x: x = x / 2 = 39 / 2 = 19
第十步:
x = 19
余数:x % 2 = 19 % 2 = 1
更新字符串: "1100001111"
更新 x: x = x / 2 = 19 / 2 = 9
第十一步:
x = 9
余数:x % 2 = 9 % 2 = 1
更新字符串: "11100001111"
更新 x: x = x / 2 = 9 / 2 = 4
第十二步:
x = 4
余数:x % 2 = 4 % 2 = 0
更新字符串: "011100001111"
更新 x: x = x / 2 = 4 / 2 = 2
第十三步:
x = 2
余数:x % 2 = 2 % 2 = 0
更新字符串: "0011100001111"
更新 x: x = x / 2 = 2 / 2 = 1
第十四步:
x = 1
余数:x % 2 = 1 % 2 = 1
更新字符串: "10011100001111"
更新 x: x = x / 2 = 1 / 2 = 0
最终的二进制表示为:"10011100001111"