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

c语言:一个整数储存在内存中的二进制中1的个数,第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的个数=%d\n",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的个数=%d\n", count);

}

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

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

例如:3&5=1

00000000000000000000000000000011

00000000000000000000000000000101

00000000000000000000000000000001

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

00000000000000000000000000000011

00000000000000000000000000000001

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

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1324439.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-12
下一篇2022-06-12

发表评论

登录后才能评论

评论列表(0条)

    保存