[c语言]求二进制位1的

二进制中的1之二 给定一个正整数N,请找出N转化为二进制后,其中所有1的位置。二进制的最低位(最右侧)为第0位。 Input 输入数据 第一行为一个整数m,表示测试用例的个数;接下来有m行,每行表示一个测试用例, 每个测试用例为一个十进制数n,1<=m<=20;1<=n<=2000000000。 Output 输出数据 十进制整数n对应的二进制数中所有1的位置,在一行输出,最低位的位置为0... 阅读详情

简介

  今天用三种方法来求出二进制位中1的个数

正文

方法一:取余求1的个数
因为是二进制位,所以%2就是最后一位的数字,然后加到count中(因为二进制中只有0和1),然后/2将最后一位去掉。最后count就是二进制位中1的个数。(但是只针对正整数)

代码如下:

#include<stdio.h>
int count_one_bits(unsigned int value)
{
 	int count = 0;
	 while(value)
	 {
 		 count = count + value%2;
 		 value /= 2;
	 }
 return count;
}
int main()
{
	 int n = 0;
 	int ret = 0;
 	printf("请输入一个整数:>");
	 scanf("%d",&n);
	 ret = count_one_bits(n);
	 printf("有%d位1\n",ret);
	 return 0;
}

方法二:位运算法
用该数按位与1得到最后一位二进制数,判断如果等于1,计数器count++,然后该数右移一位,循环判断,直到右移到该数变为0。(但是要循环32次)

代码如下:

#include<stdio.h>
int count_one_bits(unsigned int value)
{
	 int count = 0;
	 while(value)
 {
  	if((value&1) == 1)//模1取最低位数字
 	 {
  		 count++;
  	}
  	value >>=1;
 }
 return count;
}
int main()
{
	 int n = 0;
	 int ret = 0;
 	printf("请输入一个整数:>");
	 scanf("%d",&n);
	 ret = count_one_bits(n);
	 printf("有%d位1\n",ret);
	 return 0;
}

方法三:位运算(效率较上一种较高)
这种方法较上两种方法的效率都比较高,将该数每次减1然后与原数进行按位与运算,该数中有多少个1就会进行多少次按位与运算。
代码如下:

#include<stdio.h>
int count_one_bits(unsigned int value)
{
 	int sum = 0;
	 while(value)
 	{
 		 value = value & (value-1);
 		 sum++;
	 }
 return sum;
}
int main()
{
 	int n = 0;
 	int ret = 0;
 	printf("请输入一个整数:>");
 	scanf("%d",&n);
	 ret = count_one_bits(n);
	 printf("有%d位1\n",ret);
	 return 0;
}
C语言经典例题:求一个数二进制位中有几个1 示例: 输入7,输出3 方法一 : 假设输入7时,它的二进制表示为: 00000000 00000000 00000000 00000111 判断n是否为1—— 不是一则右移一位,同时count++(总数+1) int Number1(int x) { int count = 0; // 存放总数 while (x != 0) { count++; x = x >> 1; } return count; } int main() { int 阅读详情

相关推荐

c语言训练题

如何判断一个素数?100~200之间的素数怎么判断 #include&lt;stdio.h&gt; int main() { int i; int a; int b; printf(" Please input: "); scanf("%d",&amp;i); for(a=2;a&lt;i;a++) { b = i % a; if(b == 0) { printf(...

qq_44571339的博客 982

二进制中1的位置

1.题目   给出一个正整数n, 打印出它的二进制中所有1的位置。二进制中最低位的位置是0,从右往左数,位置序号依次递增。例如,正整数13的二进制(1101)中1的位置为0,2,3。 2.输入   输入数据的第一行是一个正整数d, 表示这个数据集中正整数的个数,1≤d≤10。数据集 列在d的下面。每个数据集由一个整数n(1≤ n ≤10^6)组成,且放在一行上。 3.输出   输出应当有d

sanqima的专栏 7097

GEO优化内容营销策略:从规划到落地的全流程指南

GEO内容营销是通过地域化内容提升本地搜索排名、增加流量和转化率的策略。核心包括:构建本地用户画像,挖掘需求关键词;策划本地文化融合、案例研究等多样化内容;通过网站、社交媒体、本地KOL等渠道精准分发;优化本地关键词和视觉元素;监测数据并动态调整。案例显示,咖啡馆、工业企业和服装品牌通过本地化短视频、KOL合作及社群运营,显著提升了搜索排名、客流量和销售额。关键原则是内容本地化、精准分发、KOL合作、激励用户生成内容及数据驱动优化,实现高效本地市场渗透。

解锁AI流量新红利!🚀 GEO优化(生成引擎优化)助您掌控AI搜索,让AI成为您的品牌最佳代言人! 1328

判断整数第几位是否为1

判断整数第几位是否为1

weixin_66212650的博客 1270

Aras Innovator系统配置-01对象类(一)

对象类配置-对象类属性说明

企业信息化(PLM,ERP.MES) 2032

ScanNet数据集下载全攻略:从申请到解析的保姆级教程(含常见问题解决)

本文提供了ScanNet数据集从申请授权到下载、解析的完整实战指南。针对这个大规模室内RGB-D数据集,详细介绍了官方申请流程、优化下载策略、数据验证方法,并重点解决了深度图解析等常见问题,帮助三维视觉研究者高效获取和使用这一宝贵资源。

5f4d3s2a1q的博客 617

快速计算某一整数中的二进制比特“1”的数目、以及定位二进制比特“1”的位置

二进制比特“1”的数目 位置

jocks的专栏 677

华为OD机试 - 末世分配资源包 - 二分查找 + 贪心(Python/JS/C/C++ 新系统 100分)

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。末世时代,政府为各地方配资源,现有资源分配表 nums[n],要求按如下规则分配给 k 个营地:在最优平均分配情况下,得到最大团队所获得的资源数4,3,6,9,7 216最佳划分之一:[4,3,6] -> 13 [9,7] -> 16最大

学Java,找哪吒 223

C语言:求二进制中1的个数(3种方法)

题目:写一个函数返回参数二进制中 1 的个数 比如: 15-> 0000 1111 4 个 1 程序原型: int count_one_bits(unsigned int value) { // 返回 1的位数 } 介绍三种方法: 方法一:取余求个数 我们之前学过怎么样将十进制 #include<stdio.h> #include<windows.h> #pragma...

weixin_43219708的博客 8904

【推荐100个unity插件】性能极高的逼真爆炸、火焰和烟雾效果——UNI VFX

这是一篇关于Unity中高性能GPU粒子特效插件UNI VFX的使用指南。文章介绍了该插件提供逼真的爆炸、火焰和烟雾效果,支持URP和HDRP渲染管线。主要内容包括:插件安装方法(需预先安装Visual Effect Graph和Shader Graph包)、事件系统使用方法(如create/loop/stop等事件控制)、特效分类(自动结束型和持续型特效)、检视面板配置技巧以及性能优化建议(特别提醒灯光特效对性能的影响较大)。文末还推荐了多个Unity开发相关的专栏内容。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1488

水与光的奇妙“切割之舞”:水导激光切割技术探秘

水导激光切割技术的诞生,是材料加工领域不断追求高精度、高质量加工的成果。传统激光切割技术在加工过程中,材料会因瞬间高温而产生热变形、热影响区大以及切割面粗糙等问题,这些弊端在对一些高精度、热敏性材料的加工中尤为突出 ,迫切需要一种新的技术来克服这些难题。水导激光切割技术的起源可以追溯到 20 世纪 80 年代。1986 年,德国公司 Aesculap-Werke AG 首次提出了将水流引入激光切割过程的创新想法,并制造出首代水导激光设备。不过,当时的技术尚处于雏形阶段,仅仅是在光纤出口添加了一小柱水流,激光

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 1673

C语言求其二进制位1的个数

【FROM C程序设计语言2_10】 #include #include int bitcount(unsigned int x) { int b; int mid; for (b=0;x!=0;x>>=1) { mid=x & 01; if (mid) { b++; } } return b; } int main(void) { int n

hgj125073的专栏 769

人形机器人构成及成本估算(附报告)

这些执行器本身由螺杆、减速器、电机、传感器、滚珠轴承和编码器等组件构成。实现线性与旋转运动互转。人形机器人的运动系统可以由电驱动、液压驱动或气动驱动组成,但由于电驱动具有更高的精度和更快的响应速度,正在成为主流设计方案。执行器:NSK、THK、Harmonic Drive、Leaderdrive、Nidec、Moons。由螺杆、减速器、电机、传感器、轴承和编码器组成(如上为Tesla Optimus执行器设计示意)。传感器:Keyence、Robosense、Sensata、ATI、TE、Sony。

具身机器人和通用AI 1773

C语言_求一个整数的二进制位中有几个1

#include<stdio.h> int main() { int num = 0; int count = 0; scanf("%d",&num); for(i=0;i<32;i++) { if (1==(num>>i)&1)) count++; } printf("%d",num); } //32bit //num&1==1;则一定为1 //统计num补码有几个1 ..

aiqq136的博客 333

基于STM32L4XX、HAL库的YT8531C-CA以太网收发器(PHY)驱动程序设计

是一款由裕太微推出的高性价比、低功耗的单端口 10/100M 以太网物理层收发器(PHY)。它通过标准的 MII(介质独立接口)或 RMII(精简介质独立接口)与微控制器的 MAC 层连接,实现将数字信号与网络模拟信号之间的转换。支持自动协商(Auto-Negotiation),自动选择最高速率和双工模式。支持 HP Auto-MDIX(自动交叉直连),无需区分直通线或交叉线。低功耗设计,特别适合电池供电或对功耗敏感的 STM32L4 应用。支持 MII 和 RMII 接口,节省引脚(RMII模式)。

zhusl6688的博客 627

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

C语言 用三种方法求一个整数二进制位中1的个数

Hello!大家好,也是好久没写博客,感觉自己实在是有点懒,希望通过写博客的方式来加强自己的知识记忆和督促自己学习,好了,废话不多说,今天来讲一下C语言中用三种方法求一个整数二进制位中1的个数。

2301_81565958的博客 1071

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【C语言妙操作】利用 ^ 和 & 求一个数二进制位中1的个数

根据按位与的规则我们知道,对应位存在0则结果为0,均为1结果才为1。由于1除了最后一位均为0,那么它按位与一个数时,可以让这个数除了最后一位都变成0。再看最后一位,如果为1,那么结果为1,为0则结果为0。利用这个特性,我们可以将作用后的结果的最后一位数剥离,如果是0那么它的前身是1,如果是1,那么它的前身是0。如果最终结果为1,那么作用数的最后一位为1,结果为0那么作用数的最后一位为0。2、 1按位与一个数,可以让这个数二进制位最后一位不变,其他位均变成0。

hd2720641894的博客 156

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

求某一个数的二进制位中1的个数的方法(c语言)

方法1:除二取余 注意:函数参数要定义为unsigned int(无符号整型),这样确保复数进来也可以被统计,如-1的补码为11111111111111111111111111111111(32个1)就可以被统计。 int count_bit(unsigned int n) { int count = 0; while(n) { if (n % 2 == 1) { count++; } n /= 2; } return count; } int main() {

ObviouslyCheng的博客 720

【C语言】编写代码实现:求一个整数在内存中的二进制位中1的个数

问题:求一个整数存储在内存中的二进制位中1的个数。   实现思路:只要使该整数不断右移(每次右移一位,直到它变为0),然后判断每次右移之后它的最低位是否为1,若是1则用计数器记录,上述过程用循环实现。至于判断最低位是否为1,即判断该整数模2取余的结果是否为1(若为1,表明最低位为1)。   程序代码:#define _CRT_SECURE_NO_WARNINGS #include<stdio.h

forever_chen的博客 1689

【C语言】求二进制中1的个数(三种方法)

该方法也是与其他两种方法拉开水平的一种,如果你想让别人感觉你对二进制位理解的很到位,你就可以写这种方法。=的优先级是高于&的所以要加(),那也就是说我们直接写成。因为2的二次幂的二进制中只有一个1,所以,只二进制中只有1个1的时候才能说明是2的2次幂。我个人还是比较推荐移动所求数的二进制位,因为得出来的结果只可能是1或0;那么通过不断的左移,如果左移后&的结果不为0就说明有一个1,如果说我们能让1左移1位就能得到二进制的第二位是多少,然后其实我们也可以直接移动i的二进制位,不断的右移。

HeXIAOxia_的博客 1809

c语言之二进制位中的常见试题(求二进制表达有多少位不一样 求出奇数和偶数位 求出二进制表达中有几个1)

c语言之二进制位中的一些试题。

2301_79990723的博客 889

【C语言】求二进制中1的个数

求二进制中1的个数

记录学习 834

C语言操作符

:两边都是整数的时候,进行整数除法,不保留后面小数;一边有浮点数才进行浮点数除法%:求余规定两个操作数都要是整型。x%y:y不能是0,结果范围是0 ~ y-1。

DICE_L的博客 139

C语言程序设计-练习篇

·统计二进制中1的个数 ·求两个数二进制中不同位的个数

2402_85207276的博客 868

C语言的位运算练习

1.编写函数: unsigned int reverse_bit(unsigned int value); 这个函数的返回值返回value的二进制位模式从左到右翻转后的值。 例:00000000000000000000000000011001 翻转后:10011000000000000000000000000000 程序结果返回:2550136832 考虑到翻转后的值,就是将原二进制数的第x位的值...

weixin_44788162的博客 489

复习c语言8-28

会对c语言有更深的了解

m0_73163079的博客 922
上一篇: [c语言]对strlen的三种实现
下一篇: [c语言]将strcpy()函数从低端到高端的实现
coolnut12138
博客等级 码龄9年 51粉丝 75原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值