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


     #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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    这个函数的作用是计算输入整数 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"
    
    • 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
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
  • 相关阅读:
    企业经营异常查询API:保障供应链的可靠性与稳定性
    Particle Swarm Optimization粒子群优化算法(PSO算法)概念及实战
    “我和云栖有个约会”有奖征文获奖名单已公布
    电子书制作软件Vellum mac中文版特点
    php——laravel缓存cache
    用视频设置为视频的背景剪辑的两种效果
    安装virt-manger虚拟机管理器
    《微信小程序-基础篇》带你了解小程序中的生命周期(二)
    Java堆栈区别
    复习Day15:栈与队列part02:20. 有效的括号、1047.删除字符串中所有相邻重复项
  • 原文地址:https://blog.csdn.net/weixin_46716100/article/details/133298593