Encuentra el número de unos en un entero almacenado en binario
El entero es un número decimal. Convertirlo en un número binario dará como resultado un número binario de 32 bits. Por
ejemplo, 00000000000000000000000000001011.
Podemos mover el número binario continuamente para pensar que es igual al 1 anterior, de modo que siempre que el resultado de cada uno y 1 es 1, este bit El 1 en la posición
se calcula mediante count ++, de lo contrario es 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. Aunque hemos escrito el código que queremos, debe ejecutarse 32 veces cada vez, ¿es un poco problemático?
Optimicemos
#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;
}
¡gracias por ver!