栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c语言:一个整数储存在内存中的二进制中1的个数

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c语言:一个整数储存在内存中的二进制中1的个数

方法1:
#include
int main()

{
	int num = 0;
	int count = 0;
	printf("存储一个数:");
	scanf("%d", &num);
	while (num)
	{
		if (num % 2 == 1)
			count++;
			num = num / 2;
	}
	printf("二进制中1的个数=%dn",count);
	return 0;
	

首先大家要了解一个十进制的数怎么转变为一个二进制的数;

简单来说就是一个数除2后得到一个商和一个余数,余数放在末尾,商继续除2,依次往复,知道商为0为止;

例如:7/2=3....1 然后 3/2=1....1 在1/2=0....1

因此7的二进制就是111;

所以按照上述代码可以计算出二进制中1的个数;

但是这个方法只能求得正数二进制中1的个数,因为负数在内存中的补码是和原码相反+1,所以无法求得负数的情况;

方法2:
#include 
int main()
{
	int num = 0;
	int count = 0;
	int i = 0;
	printf("请输入你要储存的数:");
	scanf("%d", &num);
	for (i = 0; i < 32; i++)
	{
		if (((num>>i)&1)==1)
		{
			count++;
		}
	}
	printf("二进制中1的个数=%dn", count);

}

看这段代码前我们得先知道&和>>的用法:

就是两个数在二进制上进行比较,同为1则是1

例如:3&5=1

00000000000000000000000000000011

00000000000000000000000000000101

00000000000000000000000000000001

而>>则是把二进制往右移一位:

00000000000000000000000000000011

00000000000000000000000000000001

所以我们可以利用&和>>让要求的数和1进行比较,32次后就能求出二进制中1的个数

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/948279.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号