c语言题目之统计二级制数中1的个数

news2024/11/17 17:28:35

文章目录

  • 题目
  • 一、方法1
  • 二、方法2
  • 三,方法3
  • 总结


题目

统计二进制数中1的个数
输入一行,输出一行
输入: 输入一个整数
输出: 输出存储在内存中二进制的1的个数

一、方法1

之前的文章中,小编写了有关于内存在二进制中的存储方法,正整数在二进制中存储在内存中存储的是二进制的原码,负整数在内存中存储的是二进制的补码。在这里我们随机输入一个整数,假如小编输入15,那么15在内存中存储如下图,然后我们让他按位与上一个1,在操作符中按位与语法就是两个1为1否则为0,在这里我们让15在内存中存储的二进制最低位与上1,然后二进制位右移一位让第二位与上1,因为整数在内存中存储4个字节也就是32个比特位,所以我们只需要向右移动32次就结束即可,下面上代码

在这里插入图片描述

int addcou(int i)
{
	int flag = 1;
	int count = 0;
	int x = 32;
	while (x != 0)
	{
		if ((i & 1) == 1)
		{
			count += 1;>   
		}
		i = i >> 1;   
		x--;   
	}
	return count;   
}
int main()   
{
	int i = 0;   
	scanf("%d",&i);   
	int count = addcou(i);   
	printf("%d",count);   
	return 0;   
}

在这里插入图片描述

二、方法2

在这里我们输入15,因为是二进制数,也就是说它的存储只有0和1,我们求它的余数要让它的范围为0和1,所以我们进来先让他取模2,在这里我们需要设置一个加数器,在这里如果取模等于1的话,计数器加1,然后再去除以2,这个也就是我们十进制转二进制数的方法,当我们最后除到最后的时候就等于0然后就没有继续换算下去,如下图,接下来上代码理解
在这里插入图片描述

int addcou(unsigned int i) //在这里传进来是有符号数,所以-1不够除,但是如果是无符号数,我们就会把他看成一个很大的整数这样就能求了
{
	int count = 0;
	while (i)
	{
		if ((i % 2) == 1)
		{
			count++;
		}
		i = i / 2;
	}
	return count;
}
int main()
{
	int i = 0;
	scanf("%d",&i);
	int count = addcou(i);
	printf("%d",count);
	return 0;
}

在这里插入图片描述

分析

在这里为什么传参接收用无符号整型接收呢?假如我们输入-1,而-1在内存中存储的就是它的反码,也就是32个1,但是我们如果我们直接用整型接收,因为系统默认int为有符号整型,我们这里接收-1,-1取模2不够所以得到0,然后在去除以2还是不够值所以得到-1,循环所以就是0个1,但是事实就是-1在内存中存储有32个1,因此我们用无符号整型接收,这样它就默认它二进制数也就是全是1为一个很大的整数,这样就可以统计出二进制中1的个数。

三,方法3

在这里我们接下来看到一个数假设我们输入为15,则二进制位1111,我们这里传入的是n然后让n*(n-1)

n = 15
n = n &(n-1);
1111 n
1110 n-1
1110 n
1101 n-1
1100 n
1011 n-1
1000 n
0111 n-1
0000 n
在这里我们可以发现每次按位与一次就消去一个1,这样我们设置一个计数器,按位与一次加一然后到最后按位与为0结束,接下来上代码理解:

int addcou(int i)
{
	int count = 0;
	while (i)
	{
		i = i & (i - 1);
		count++;
	}
	return count;
}
int main()
{
	int i = 0;
	scanf("%d",&i);
	int count = addcou(i);
	printf("%d",count);
	return 0;
}

在这里插入图片描述


总结

以上就是今天要讲的内容,本文仅仅简单介绍了c语言题目之统计二级制数中1的个数的使用,各位读者有其它解法欢迎打在评论区。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1359329.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于YOLOv7算法的高精度实时安全背心目标检测识别系统(PyTorch+Pyside6+YOLOv7)

摘要:基于YOLOv7算法的高精度实时安全背心目标检测系统可用于日常生活中检测与定位安全背心,此系统可完成对输入图片、视频、文件夹以及摄像头方式的目标检测与识别,同时本系统还支持检测结果可视化与导出。本系统采用YOLOv7目标检测算法来训…

flutter 五:MaterialApp

MaterialApp const MaterialApp({super.key,this.navigatorKey, //导航键this.scaffoldMessengerKey, //scaffold管理this.home, //首页Map<String, WidgetBuilder> this.routes const <String, WidgetBuilder>{}, //路由this.initialRoute, //初始路由th…

四种“栈溢出检测方法”实现分析(2种纯软件、一种纯硬件、一种软硬件结合)

1、两种纯软件的栈溢出检测方法 参考博客&#xff1a;《freeRTOS的栈溢出检测机制》&#xff1b; 2、纯硬件&#xff1a;使用栈限制寄存器 2.1、工作逻辑分析 前提条件&#xff1a;使用满减栈硬件上提供栈限制寄存器&#xff08;用SP_limit表示&#xff09;&#xff0c;可以…

互联网广告行业发展历程

在20年的历程中&#xff0c;广告主与媒体方持续面对着一些问题&#xff0c;一些核心问题推动了行业的迭代。 互联网广告经过了20年左右的高速发展&#xff0c;已愈发成熟&#xff0c;其历程是有趣的。 对互联网广告发展的理解&#xff0c;网上的文章并不多&#xff0c;已有的…

AIGC初探:提示工程 Prompt Engineering

简介 提升工程是什么 提示工程&#xff08;Prompt Engineering&#xff09;是人工智能领域中的一个概念&#xff0c;特别是在自然语言处理&#xff08;NLP&#xff09;领域中。它是一种通过设计和优化输入提示来提高AI模型表现的方法。 对于基于转换器的大型语言模型&#x…

无监督学习(K-Means)的认识

目录 一、无监督学习 二、无监督学习和有监督学习的区别 三、K-Means 3.1数据分析 3.2k-meas算法 3.3数据正态化后k-means 3.4找最佳k&#xff08;Elbow Plot&#xff09; 四、k-means算法的优缺点 一、无监督学习 无监督学习是一种机器学习的方法&#xff0c;…

机器学习--回归算法

&#x1f333;&#x1f333;&#x1f333;小谈&#xff1a;一直想整理机器学习的相关笔记&#xff0c;但是一直在推脱&#xff0c;今天发现知识快忘却了&#xff08;虽然学的也不是那么深&#xff09;&#xff0c;但还是浅浅整理一下吧&#xff0c;便于以后重新学习。 &#x1…

Eclipse设置不依赖系统环境变量,设置lombok

设置不依赖系统环境变量&#xff0c;如图首行添加 -vm. lombok配置在最后两行

企业老旧档案怎么处理?

不管选择何种处理方式处理企业老旧档案&#xff0c;都要先制定一份详细的档案处理计划&#xff0c;明确处理的目标、方式和时间&#xff0c;并确保有足够的人力和物力资源来完成处理工作。 一般来说&#xff0c;常用的企业老旧档案有以下几种方法&#xff1a; 1. 整理归档&…

半导体Memory的分类

文章目录 略图introRAM & ROM 略图 intro 存储器是嵌入式系统中用于存放数据和程序的模块。有些存储器是MCU内置的&#xff0c;有些是扩展的。 存储器嵌入式系统中常见且重要的外设模块。搞清楚存储器的分类是从事嵌入式开发工作的一项基本功。 从功能上&#xff0c;存储器…

2023高级人工智能期末总结

1、人工智能概念的一般描述 人工智能是那些与人的思维相关的活动&#xff0c;诸如决策、问题求解和学习等的自动化&#xff1b; 人工智能是一种计算机能够思维&#xff0c;使机器具有智力的激动人心的新尝试&#xff1b; 人工智能是研究如何让计算机做现阶段只有人才能做得好的…

DNs服务学习笔记

DNS&#xff1a;域名系统&#xff08;英文&#xff1a;Domain Name System)是一个域名系统&#xff0c;是万维网上作为域名和IP地址相互映射的一个分布式数据库&#xff0c;能够使用户更方便的访问互联网&#xff0c;而不用去记住能够被机器直接读取的IP数串。类似于生活中的11…

基于帝国主义竞争算法优化的Elman神经网络数据预测 - 附代码

基于帝国主义竞争算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于帝国主义竞争算法优化的Elman神经网络数据预测 - 附代码1.Elman 神经网络结构2.Elman 神经用络学习过程3.电力负荷预测概述3.1 模型建立 4.基于帝国主义竞争优化的Elman网络5.测试结果6.参考文献7.Matl…

P11 FFmpe时间基和时间戳

前言 从本章开始我们将要学习嵌入式音视频的学习了 &#xff0c;使用的瑞芯微的开发板 &#x1f3ac; 个人主页&#xff1a;ChenPi &#x1f43b;推荐专栏1: 《C_ChenPi的博客-CSDN博客》✨✨✨ &#x1f525; 推荐专栏2: 《Linux C应用编程&#xff08;概念类&#xff09;_C…

C/C++输入函数总结

1、cin 2、cin.get 3、cin.getline 4、getline 5、gets 6、getchar 1、cin 可以接受单个字符和字符串&#xff0c;但遇空格,"TAB","回车"结束&#xff01;&#xff01;&#xff01; 若不跳过空白字符&#xff0c;使用 noskipws 流控制。 使用方法如…

数据结构学习 jz56数组中数字出现的次数

关键词&#xff1a;位运算 异或性质 虽然有两道题&#xff0c;但是其实应该分成三个级别的题目。 题目一&#xff1a; 一个整型数组 sockets 里除 一个 数字之外&#xff0c;其他数字都出现了两次。 思路&#xff1a;异或的性质 复杂度计算&#xff1a; 时间复杂度O(n) 空…

C语言全面学习基础阶段01—C生万物

如何学好 C 语言 1. 鼓励你&#xff0c;为你叫好。 C 生万物 编程之本 长远 IT 职业发展的首选 C 语言是母体语言&#xff0c;是人机交互接近底层的桥梁 学会 C/C &#xff0c;相当于掌握技术核心 知识点一竿子打通。 IT 行业&#xff0c;一般每 10 年就有一次变革 40 年间&a…

智慧校园全空间三维电子沙盘系统

一、概述 易图讯科技&#xff08;www.3dgis.top&#xff09;采用大数据、云计算、虚拟现实、物联网、AI等先进技术&#xff0c;自主可控高性能WebGIS可视化引擎&#xff0c;支持多用户客户端通过网络请求访问服务器地图和专题数据&#xff0c;提供地理信息数据、专题数据的并发…

数据迁移怎么测,都有哪些步骤?

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;软件测试面试题分享&#xff1a; 1000道软件测试面试题及答案&#x1f4e2;软件测试实战项目分享&#xff1a; 纯接口项目-完…

【机器学习】卷积神经网络----GoogLeNet网络(pytorch)

代码是一个使用PyTorch实现的GoogLeNet模型&#xff0c;该模型是一个深度卷积神经网络&#xff08;CNN&#xff09;用于图像分类任务。 1. 定义基本卷积模块 BasicConv2d 类是一个基本的卷积块&#xff0c;包含一个卷积层、批归一化层和ReLU激活函数。该类用于构建Inception模块…