概述
C++版本计算一个数字的二进制中0或1的个数原理讲解及代码实现
/*!
* 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++版本计算一个数字的二进制中0或1的个数原理讲解及代码实现所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复