考察进制转化 十进制转为二进制

 #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
考察进制转化 十进制转为二进制_第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"

你可能感兴趣的:(C++,算法)