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.

Colocando los bits de un int al revés en una matriz.

Hola chicos, soy un principiante total y este es mi primer post aquí. Para un proyecto más grande, quiero que cada bit de la entrada entera se coloque al revés en un arreglo que he creado. Funciona perfectamente bien para la primera fila, pero cada fila siguiente del arreglo se llena con 0s sin importar la entrada. ¿Alguna sugerencia?

“`cpp
#include<stdio.h>

int main(int argc, char *argv[]){
unsigned short int canvoted, mask;
unsigned short int individualvote[3][7]={{0}};
int i, j;

<pre><code>mask=0b1;

for(i=0; i<3; i++){
printf("Dame un entero:\n");
scanf("%hu", &canvoted);

for(j=0; j<7; j++){
individualvote[i][j] = canvoted & mask;
individualvote[i][j] = individualvote[i][j] >> j;
mask = mask << 1;
printf("%hu ", individualvote[i][j]);
}
printf("\n##\n");
}
return(0);
</code></pre>

}
“`</stdio.h>

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Descripción del problema

    El usuario está intentando colocar cada bit de la entrada entera en un arreglo que ha creado. Aunque funciona perfectamente bien para la primera fila, cada fila siguiente del arreglo se llena de ceros, sin importar la entrada.

    Solución

    El problema radica en el uso de la variable mask. La mask debería reiniciarse a su valor inicial de 0b1 al comienzo de cada iteración del bucle externo.

    Mueva la declaración mask=0b1; dentro del bucle externo y antes del bucle interno.

    for(i=0; i<3; i++){
        printf("Ingrese un entero:\n");
        scanf("%hu", &canvoted);
        mask=0b1; // Reiniciar la mask a 1 al comienzo de cada iteración
    
        for(j=0; j<7; j++){
            individualvote[i][j] = canvoted & mask;
            individualvote[i][j] = individualvote[i][j] >> j;
            mask = mask << 1;
            printf("%hu ", individualvote[i][j]);
        }
        printf("\n##\n");
    }
    

    Con esta modificación, el programa funcionará como se espera.

    Explicación

    La variable mask se utiliza para extraer cada bit de la entrada entera. La mask se inicializa primero en 0b1, que es el valor binario con solo el bit más a la derecha establecido en 1.

    En cada iteración del bucle interno, la mask se realiza una operación bitwise-AND con la variable canvoted para extraer el valor del bit actual.

    Después de eso, la mask se desplaza un bit a la izquierda para prepararse para la siguiente iteración del bucle interno.

    Si la mask no se reinicia a su valor inicial al comienzo de cada iteración del bucle externo, causará que se asignen valores incorrectos a los elementos del arreglo individualvote en las iteraciones posteriores.

    Por lo tanto, es importante reiniciar la variable mask a 0b1 al comienzo de cada iteración del bucle externo.

Comments are closed.