C语言---求一个整数存储在内存中的二进制中1的个数--3种方法

//编写代码实现:求一个整数存储在内存中的二进制中1的个数
//第一种写法
/*int count_bit_one(unsigned int n)
{int count = 0;while (n )//除到最后余数是0,那么这个循环就结束了{//这个题就是可以想成求15的二进制的过程//每次都除以2,余数为1的时候就count++if ((n % 2) == 1)//假设输入的是15count++;n = n / 2;//换下一个数继续除,直到所有的数除完//15/2=7  7/2=3  3/2=1  1/2=0,四次计算,每次计算的余数都为1}//15的二进制是1111return count; 
}
//对于这部分函数不理解的话可以自己画出自己一次计算的一个数的二进制的过程int main()
{int num = 0;scanf("%d", &num);int ret = count_bit_one(num);printf("%d\n", ret);return 0;
}*/
但是我们输入-1,这个输出结果就有问题了
解决方法:传过去num,我们用unsigned int n来接收传过来的数,
使用 unsigned int 在这个函数中是恰当的,因为它确保了函数可以正确处理所有非负整数值,并且避免了有符号整数可能带来的问题。//第二种算法--不考虑正负号
//-1在内存中的补码是全1
//11111111111111111111111111111111
//不关心符号的写法//n&1==1   就说明n的二进制位的最低位是1
//n&1==0   就说明n的二进制位的最低位是0//计算完这一位,想要计算下一位,那么就需要用到
//右移操作符了
//把n的二进制数的每一位都移到最低位
//00000000000000000000000000000001--1的补码
//因为&的用法是对应的二进制位,
// 有0则为0,两个同时为1才为1
//如果n的二进制数最低位和1的二进制数最低位产生反应,
//那么两个1就会场生一个1,
// 如果n的最低位数字是0,那么产生的数字仅仅是0
/*int count_bit_one(int n)
{int count = 0;for (int i = 0; i < 32; i++){//有0则为0,两个同时为1才为1if ((n >> i) & 1 == 1)//i是从0开始的,也就是最开始的n的最低位//然后利用右移操作符依次变更最低位的数字{count++;//如果结果为1那么就++}   }return count;
}int main()    
{    int num = 0;    scanf("%d", &num);  int ret = count_bit_one(num);   printf("%d\n", ret);    return 0;   
}    *///第三种写法
//铺垫
/*
n=11   n=n&(n-1)
二进制
一开始:
n  = 1011
n-1= 1010
赋值后:   
n=n&(n-1),   &有 0就是0,两个1就是1
得到一个新的n
n  = 1010
n-1 =1001
再次用新得来的n和n-1来为新的n赋值
n=n&(n-1)
n   =    1000
n-1 =    0111
再次赋值
n=n&(n-1)
n=0000n从最开始的1011不断赋值到0000,
n=n&(n-1)这个方程把n的二进制序列中的最右边的1去掉了
*///即通过反复应用 n = n & (n - 1); 直到 n 变为0,
// 每次操作清除一个1,计数器增加1,最后得到1的总数。int count_bit_one(int n)
{int count = 0;int i = 0;while (n)//循环停下来的时候n就变成0了{n = n & (n - 1);//执行一次就会去掉一个1count++;}return count;
}int main()
{int num = 0;scanf("%d", &num);int ret = count_bit_one(num);printf("%d\n", ret);return 0;
}    每次执行 n = n & (n - 1); 都会减少 n 的二进制表示中1的个数,直到没有1剩下,此时 n 变为0,循环结束。

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

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

相关文章

跟小伙伴们说一下

因为很忙&#xff0c;有一段时间没有更新了&#xff0c;这次先把菜鸟教程停更一下&#xff0c;因为自己要查缺补漏一些细节问题&#xff0c;而且为了方便大家0基础也想学C语言&#xff0c;这里打算给大家开一个免费专栏&#xff0c;这里大家就可以好好学习啦&#xff0c;哪怕0基…

面试题·栈和队列的相互实现·详解

A. 用队列实现栈 用队列实现栈 实现代码如下 看着是队列&#xff0c;其实实际实现更接近数组模拟 typedef struct {int* queue1; // 第一个队列int* queue2; // 第二个队列int size; // 栈的大小int front1, rear1, front2, rear2; // 两个队列的首尾指针 } MyS…

图像处理ASIC设计方法 笔记25 红外成像技术:未来视觉的革命

在当今科技飞速发展的时代,红外成像技术以其独特的优势,在医疗、工业检测等多个领域扮演着越来越重要的角色。本章节(P146 第7章红外焦平面非均匀性校正SoC)将深入探讨红外成像系统中的关键技术——非均匀性校正SoC,以及它如何推动红外成像技术迈向新的高度。 红外成像系统…

6.Redis之String命令

1.String类型基本介绍 redis 所有的 key 都是字符串, value 的类型是存在差异的~~ 一般来说,redis 遇到乱码问题的概率更小~~ Redis 中的字符串,直接就是按照二进制数据的方式存储的. (不会做任何的编码转换【讲 mysql 的时候,知道 mysql 默认的字符集, 是拉丁文,插入中文…

Jenkins--从入门到入土

Jenkins–从入门到入土 文章目录 Jenkins--从入门到入土〇、概念提要--什么是CI/DI&#xff1f;1、CI&#xff08;Continuous Integration&#xff0c;持续集成&#xff09;2、DI&#xff08;DevOps Integration&#xff0c;DevOps 集成&#xff09;3、解决的问题 一、Jenkins安…

iOS 开发系列:基于VNRecognizeTextRequest识别图片文字

1.添加Vision Kit依赖 在项目设置中点击"General"选项卡&#xff0c;然后在"Frameworks, Libraries, and Embedded Content"&#xff08;框架、库和嵌入内容&#xff09;部分&#xff0c;点击""按钮。搜索并选择"Vision.framework"。…

[AIGC] flink sql 消费kafka消息,然后写到mysql中的demo

这是一个使用 Flink SQL 从 Kafka 中消费数据并写入 MySQL 的示例。在这个示例中&#xff0c;我们将假设有一个 Kafka 主题 “input_topic”&#xff0c;它产生格式为 (user_id: int, item_id: int, behavior: string, timestamp: long) 的数据&#xff0c;我们需要把这些数据写…

world machine学习笔记(4)

选择设备&#xff1a; select acpect&#xff1a; heading&#xff1a;太阳的方向 elevation&#xff1a;太阳的高度 select colour&#xff1a;选择颜色 select convexity&#xff1a;选择突起&#xff08;曲率&#xff09; select height&#xff1a;选择高度 falloff&a…

用常识滚雪球:拼多多的内生价值,九年的变与不变

2024年5月22日&#xff0c;拼多多公布了今年一季度财报&#xff0c;该季度拼多多集团营收868.1亿元&#xff0c;同比增长131%&#xff0c;利润306.0亿&#xff0c;同比增长了202%&#xff0c;数据亮眼。 市场对拼多多经历了“看不见”、“看不懂”、“跟不上”三个阶段。拼多多…

Vue.js条件渲染与列表渲染指南

title: Vue.js条件渲染与列表渲染指南 date: 2024/5/26 20:11:49 updated: 2024/5/26 20:11:49 categories: 前端开发 tags: VueJS前端开发数据绑定列表渲染状态管理路由配置性能优化 第1章&#xff1a;Vue.js基础与环境设置 1.1 Vue.js简介 Vue.js (读音&#xff1a;/vju…

SwiftUI中的Slider的基本使用

在SwiftUI中&#xff0c;可以使用Slider视图创建一个滑动条&#xff0c;允许用户从范围中选择一个值。通过系统提供的Slider&#xff0c;用起来也很方便。 Slider 先看一个最简单的初始化方法&#xff1a; State private var sliderValue: Float 100var body: some View {V…

[AIGC] mac os 中 .DS_Store 是什么

.DS_Store 是在 MacOS 系统中由 Finder 应用程序创建和维护的一种隐藏文件&#xff0c;用于保存有关其所在目录的自定义属性&#xff0c;例如图标位置或背景颜色。 “.DS_Store” 是 “Desktop Services Store” 的缩写。 .DS_Store 的作用 .DS_Store 文件在每个 Mac OS X 文…

ollama 使用,以及指定模型下载地址

ollama windows 使用 官网&#xff1a; https://ollama.com/ windows 指定 models 下载地址 默认会下载在C盘 &#xff0c;占用空间 在Windows系统中&#xff0c;可以通过设置环境变量OLLAMA_MODELS来指定模型文件的下载和存储路径。具体操作步骤如下&#xff1a; 1.打开系统…

【python006】miniconda3环境搭建(非root目录,最近更新中)

1.熟悉、梳理、总结项目研发实战中的Python开发日常使用中的问题。 2.欢迎点赞、关注、批评、指正&#xff0c;互三走起来&#xff0c;小手动起来&#xff01; 文章目录 1.背景介绍2. 1.背景介绍 环境移植&#xff0c;可能影响部署本机环境信息&#xff0c;探索、总结移植有效…

轻量化微调相关学习

轻量化微调&#xff08;Lightweight Fine-Tuning&#xff09;是指在大型预训练模型基础上&#xff0c;通过修改或添加少量参数来进行模型适应性调整的一种方法&#xff0c;旨在减少计算资源消耗和避免过拟合问题&#xff0c;同时保持模型的性能。这种方法特别适用于资源有限或需…

一个程序员的牢狱生涯(36)夹带

星期一 夹 带 郑所和小X州在小院子里说着话,尽管我竖起耳朵想要听到他们的说话内容。但因为他们的说话声音很低,我努力半天后,什么都听不清。只能看到小X州恭恭敬敬的站在郑所面前,不时地点头答应着的样子。 没过多长时间,小X州从院子里返回了号子。我注意到他的脸上带着一…

15、设计模式之责任链模式

责任链模式 顾名思义&#xff0c;责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;为请求创建了一个接收者对象的链。这种模式给予请求的类型&#xff0c;对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。 在这种模式中&#xff0c;通…

搜索引擎--ES基础概念

ES是一款开源的搜索引擎&#xff0c;相比于mysql&#xff0c;它提供了非常强大的搜索功能 下面我们需要简单的了解一下ES相比于mysql中的一些基本概念的区别&#xff1a; 首先我们要知道es在存储数据的时候都是以json格式来存储的 mysql <------> ES&#xff1a; table…

【九十四】【算法分析与设计】练习四蛮力法练习,排列问题和组合问题,求解最大连续子序列和问题,求解幂集问题,求解0/1背包问题,求解任务分配问题

求解最大连续子序列和问题 给定一个有n&#xff08;n≥1&#xff09;个整数的序列&#xff0c;要求求出其中最大连续子序列的和。 例如&#xff1a; 序列&#xff08;-2&#xff0c;11&#xff0c;-4&#xff0c;13&#xff0c;-5&#xff0c;-2&#xff09;的最大子序列和为20…

pymysql.err.OperationalError: (1030, ‘Got error 168 from storage engine‘)

错误 pymysql.err.OperationalError: (1030, Got error 168 from storage engine) 通常与MySQL的InnoDB存储引擎相关&#xff0c;它指示你试图进行的操作超出了存储引擎的能力或资源限制。具体来说&#xff0c;MySQL错误代码168&#xff08;或“ER_TABLE_NEEDS_UPGRADE”&#…