Sumar los 1 de un numero binario

hola, tengo una duda, tengo un programa que me convierte la temperatura a binario, pero quiero que el numero binario me sume todos los 1 unos presentes, como por ejemplo este binario 10010101= 4, sumo los 1 del numero, hay algún código que me permita hacer esto, es una emergencia.

Suponiendo que valor es un entero puedes hacer

int unos = 0;
for(int i = 0; i < 16; i++){
  unos += (valor >> i) & 0x0001;
}

Si es un byte

int unos = 0;
for(int i = 0; i < 8; i++){
  unos += (valor >> i) & 0x01;
}

Saludos

PD: Emergencia es tener que llamar una ambulancia o a los bomberos, esperar respuesta en un foro y a estas horas, claramente no es una "emergencia". :wink:

gracias, es para un examen, por eso mi urgencia, checare si funciona

trato de ponerlo en este código me marca error

void setup ()
{
Serial.begin(9600);

}

void loop()
{
float temperatura=(analogRead(A0)*500)/1024;
Serial.println("la temperatura es:");
Serial.println(temperatura);

int num = temperatura;
uint8_t bitsCount = sizeof( num ) * 8;
char str[ bitsCount + 1 ];
itoa( num, str, 2 );

Serial.println("numero en binario es:");
Serial.println( str );

delay(1000);
}

Ponlo antes del delay y cambia valor por num, luego agrega el print de unos para ver el resultado.

1 Like

A si quedo, aun parece que funciona bien, aun que mi sensor a veces marca numeros negativos.

void setup ()
{
Serial.begin(9600);

}

void loop()
{
float temperatura=(analogRead(A0)5100)/1024;
Serial.println("la temperatura es:");
Serial.println(temperatura);

int num = temperatura;
uint8_t bitsCount = sizeof( num ) * 8;
char str[ bitsCount + 1 ];
itoa( num, str, 2 );

Serial.println("numero en binario es:");
Serial.println( str );
int convercion= int(str);

int unos = 0;
for(int i = 0; i < 8; i++)
{
unos += (convercion >> i) & 0x01;
}
Serial.println("la suma de los 1 es:");
Serial.println(unos);
delay(1000);
}

Bueno, veamos.

convercion es entero entonces tienes que usar el primer código (que es para enteros y te lo aclaré) sino estas contando solo los 1's del byte bajo (aunque temperatura nunca llegue a 255 y "quepa" en un byte, estas trabajando con un entero por lo que el código así como está, está mal).

No entiendo para qué hiciste la conversión porque num ya es entero (salvo que te lo haya pedido el profesor).

Que num sea negativo no influye en el calculo de la cantidad de 1's que tenga el número.

Hay un error en el cálculo de temperatura (supongo que va * en lugar de 5), revisa.