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;
}
見てくれてありがとう!