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

概述

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的个数原理讲解及代码实现所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部