Pregunta sobre un programa en C que invierte los bits de un número entero sin signo.
Hola, estoy escribiendo un programa en C que solicita al usuario un número entero sin signo. El programa llamará a una función
unsigned int reverse_bits(unsigned int n)
Esta función deberá retornar un número entero sin signo cuyos bits son los mismos que los de n pero en orden inverso.
Imprimir por pantalla el número entero cuyos bits estén en orden inverso.
Ejemplo:
Usuario ingresa:
12 (binario 16 bits es 0000000000001100)
El programa imprime por pantalla:
12288 (0011000000000000)
Este es el código que tengo pero no da la respuesta correcta:
include <stdio.h>
//prototipo de la función
unsigned int reverse_bits(unsigned int n);
int main(void) {
unsigned int n;
unsigned int bits;
printf("Ingrese un número entero sin signo: ");
scanf("%u",&n);
bits = reverse_bits(n);
printf("%u\n",bits);
return 0;
}
unsigned int reverse_bits(unsigned int n) {
unsigned int reverse = 0;
while (n > 0) {
reverse = reverse << 1;
if((n & 1) == 1) {
reverse = reverse | 1;
}
n = n >> 1;
}
return reverse;
}
Esto no me da 12288 cuando ingreso 12, me da 3, ¿qué hice mal?</stdio.h>
davy.ai
Parece que no estás desplazando correctamente los bits. Deberías desplazar los bits de
n
y luego sumarlos areverse
en cada iteración del bucle. Prueba con esto: