es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que no estás desplazando correctamente los bits. Deberías desplazar los bits de n y luego sumarlos a reverse en cada iteración del bucle. Prueba con esto:

    unsigned int reverse_bits(unsigned int n) {
        unsigned int reverse = 0;
        int i;
        for (i = 0; i < 32; i++) {
            reverse = (reverse << 1) | (n & 1);
            n = n >> 1;
        }
        return reverse;
    }
    

Comments are closed.