我是靠谱客的博主 忧郁魔镜,这篇文章主要介绍C++版本计算一个数字的二进制中0或1的个数原理讲解及代码实现,现在分享给大家,希望可以做个参考。

C++版本计算一个数字的二进制中0或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
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
/*! * Copyright (c) 2020,ZYF. * All Rights Reserved. * * file main.cpp * brief 测试 * * author ZYF * date 2020/7/1 22:06:34 * version 1.0.0 */ #include <iostream> using namespace std; /*! * brief 计算一个数字的二进制中0或1的个数 * param nData : int 待计算数字 * param bZeroOrOne : bool 计算0或1的个数(true:计算0的个数;false:计算1的个数) * returns int : 0或1的个数 * throws <exception class> * remarks * see */ int GetSum(int nData, bool bZeroOrOne = false) { /* X&(X-1) ;统计X的二进制中1的个数; X|(X+1);统计X的二进制中0的个数; & (位“与”):都为1时,结果为1 | (位“或”):只要有一个为1,结果就是1 */ int nSum = 0; if (!bZeroOrOne) { /* 算法逻辑: 把一个整数减去1,再和原整数做与运算,会把该整数最右边一个1变成0。 那么一个整数的二进制有多少个1,就可以进行多少次这样的操作 */ while (nData) { nSum++; nData &= (nData - 1); } } else { /* 算法逻辑: */ while (nData + 1) { nSum++; nData |= (nData + 1); } } return nSum; } int main(int argc, char* argv[]) { int nData = 300; int nSum_Zero = GetSum(300, true); int nSum_One = GetSum(300, false); printf("n数字%d的二进制数中,0的个数为%d个,1的个数为%d个n",nData,nSum_Zero,nSum_One); return 1; }

在这里插入图片描述

最后

以上就是忧郁魔镜最近收集整理的关于C++版本计算一个数字的二进制中0或1的个数原理讲解及代码实现的全部内容,更多相关C++版本计算一个数字内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部