【C语言】求一个整数的二进制序列中1的个数的三种方法

2023-09-22 01:25:57

方法一:逐位%2法

该方法的初步测试代码如下:

int NumberOf1(int n) 
{
	int count = 0;
	while (n)
	{
        if (n % 2 == 1)
	    {
		   count++;
	    }
          n = n / 2;
	}
	return count;
}

众所周知,数据在内存里以补码的形式存储,这是为了简化计算机的结构设计,同时也提高了运算速度。因此在计算机系统中,数值一律用补码来表示和存储

原理图解:

该方法图解如下:

测试运行:

原理图解如上,接下来运行测试一下:

测试正数:输入15

测试0:输入0

可以看到,程序测试非负数都是没有问题的,但是当测试到负数时就会这样:

测试负数:输入-6

 可以看到,正数和0的测试都没有问题,但是负数却显示为0,我们来看看问题出在哪里了:

强制转换后函数代码如下:

int NumberOf1(unsigned int n) 
{
	int count = 0;
	while (n)
	{
        if (n % 2 == 1)
	    {
		   count++;
	    }
          n = n / 2;
	}
	return count;
}

测试运行:

 强制转换可以实现的原理是:


  方法二:逐位&1法

该方法的初步测试函数代码如下:

int NumberOf1(int n)
{
	int i = 0;
	int count = 0;
	for (i = 0; i <32; i++)
	{
		if (n >> i & 1 == 1)
		{
			count++;
		}
	}
	return count;
}

原理图解:

该方法原理图解如下:

测试运行:

测试正数:输入15

测试0:输入0  

 

测试负数:输入-7

输出结果均正确,该方法可行。


方法三:n&(n-1)法

该方法的初步测试代码如下:

int NumberOf1(int n)
{
	int count = 0;
	while (n)
	{
		n=n& (n - 1);
		count++;
	}
	return count;
}

原理图解:

该方法原理图解如下:

测试运行:

原理如上,测试运行:

测试正数:输入11

测试0:输入0  

测试负数:输入-11

输出结果均正确,该方法可行。


今日感悟:学而不思则罔,思而不学则殆!

更多推荐

Google高性能开源框架gRPC:快速搭建及HTTP/2抓包

一、什么是gRPCgRPC是google发起的一个*远程过程调用(rpc)*开源框架,可以在任何语言中,用任何编程语言编写。gRPC基于HTTP/2协议,使用ProtocolBuffers作为序列化工具。gRPC官网:https://grpc.io/RPCRemoteProcedureCall,远程过程调用协议,一种通

AI----人工智能简介

【原文链接】AI----人工智能简介一、人工智能简介1.1人工智能发展的要素数据算法计算力1.2CPU和GPU的区别CPU主要适合I/O密集型的任务GPU主要适合计算密集型任务1.3人工智能、机器学习、深度学习的联系机器学习是人工智能的实现途径深度学习是机器学习的一个方法1.4人工智能发展阶段1.5人工智能主要分支计算

需求管理-架构真题(三十四)

产品配置是指一个产品在其生命周期各个阶段所产生的各种形式(机器可读或人工可读)和各种版本的()的集合。(2021)需求规格说明、设计说明、测试报告需求规格说明、设计说明、计算机程序设计说明、用户手册、计算机程序文档、计算机程序、部件及数据答案:D解析:产品配置主要就是文档、计算机程序、部件及数据的集合。需求管理的主要活

Matlab程序结构

目录顺序结构循环结构1、for循环结构分支结构1、if...end结构2、if...else...end结构3、switch...case...end结构顺序结构顺序结构是最简单的程序结构。用户在编写玩程序后,系统就将按照程序的实际位置逐一顺次执行。例1:求a、b两个数组的和>>a=[123];>>b=[456];>>

【OpenSSL】单向散列函数

什么是单向散列函数任意长度数据生成固定长度是散列快速计算消息变化散列变化单向不可逆,抗碰撞应用场景文件完整性口令加密消息认证伪随机数配合非对称加密做数字签名比特币工作量证明单向hash抗碰撞弱抗碰撞给定X和hash值的情况下,找到另外个数,hash值相同。强抗碰撞找到散列值相同的两个字符串MD5,SHA-1已经被攻破可

竞赛 基于深度学习的人脸表情识别

文章目录0前言1技术介绍1.1技术概括1.2目前表情识别实现技术2实现效果3深度学习表情识别实现过程3.1网络架构3.2数据3.3实现流程3.4部分实现代码4最后0前言🔥优质竞赛项目系列,今天要分享的是基于深度学习的人脸表情识别该项目较为新颖,适合作为竞赛课题方向,学长非常推荐!🧿更多资料,项目分享:https:/

Learn Prompt-Prompt 高级技巧:API-Bank & AgentBench

模型评估是Agent学习过程中至关重要的一环。通过分析数据来评估Agent的能力,可以客观地衡量它在特定任务或领域中的表现。数据评估是不断迭代和改进的基础。通过反复评估和分析数据,Agent可以逐步改进自身,并不断优化其能力。数据评估还可以将Agent与其他Agent或标准进行比较,从而了解其在同一任务或领域中的相对能

Learn Prompt-GPT-4:综述

简介"GPT-4,这是OpenAI在扩大深度学习方面的最新里程碑。GPT-4是一个大型的多模态模型(接受图像和文本输入,发出文本输出),虽然在许多现实世界的场景中能力不如人类,但在各种专业和学术基准上表现出人类水平的性能。"--OpenAIGPT-4,顾名思义是GPT-3和GPT-3.5的下一代模型。相比前面的模型,G

汽车行业新闻稿怎么写?怎么写关于汽车的新闻稿?

撰写汽车行业新闻稿需要遵循一定的结构和要点,以确保内容准确、清晰,并能吸引读者的兴趣。以下是关于汽车的新闻稿的一些写作要点和建议,接下来伯乐网络传媒就来给大家分享一下:标题醒目:新闻稿的标题应该简洁明了,能够吸引读者的眼球并概括新闻的要点。可以使用一些字眼来突显重点,例如“首次亮相”、“全新发布”等。新闻价值:新闻稿应

Python Quine 介绍

一个Quine是一个产生其源代码作为输出的计算机程序。该程序不需要输入,并输出其源代码的副本。Quine很有趣,因为它们似乎违背了编程的目的,即根据输入生成输出。在某些情况下,Quine可能是有帮助的,例如当您需要生成程序源代码的副本时。运行PythonQuine创建一个Quine并不特别困难,但需要一些思考。基本思想

Python 基于PyCharm断点调试

视频版教程Python3零基础7天入门实战视频教程PyCharmDebug(断点调试)可以帮助开发者在代码运行时进行实时的调试和错误排查,提高代码开发效率和代码质量。准备一段代码defadd(num1,num2):returnnum1+num2if__name__=='__main__':fornuminrange(1

热文推荐