達成するためのコードを書く:バイナリに格納された整数の1の数を見つける

2進数で格納された整数の1の数を見つけます

整数は10進数です。2進数に変換すると、32ビットの2進数になります。たとえば
、00000000000000000000000000001011です。2
進数を連続的に移動して、前の1と等しいと見なすことができます。それぞれと1の結果は1、このビットインポジション1
はcount ++によって計算され、それ以外の場合は0です。

#include <stdio.h>
#include <stdlib.h>
int main()
{
    
    
	int num = 0;
	int count = 0;
	scanf("%d", &num);
	int i = 0;
	for (i = 0; i<32; i++)
	{
    
    
		if (1 == ((num >> i) & 1))
			count++;
	}
	printf("%d\n", count);
	system("pause");
	return 0;
}

ここに画像の説明を挿入
2.必要なコードを記述しましたが、毎回32回実行する必要がありますが、少し面倒ですか?
最適化しましょう

#include <stdio.h>
#include <stdlib.h>
int main()
{
    
    
	int num = 0;
	printf("请输入一个整数:");
	scanf("%d", &num);
	int i = 0;
	int count = 0;

	while (num)
	{
    
    
		count++;
		num = num&(num - 1);
	}

	printf("它在二进制中1的个数 = %d\n", count);
	system("pause");
	return 0;
}

ここに画像の説明を挿入
見てくれてありがとう!

おすすめ

転載: blog.csdn.net/weixin_54748281/article/details/113784225