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>
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
. Lamask
debería reiniciarse a su valor inicial de0b1
al comienzo de cada iteración del bucle externo.Mueva la declaración
mask=0b1;
dentro del bucle externo y antes del bucle interno.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. Lamask
se inicializa primero en0b1
, 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 variablecanvoted
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 arregloindividualvote
en las iteraciones posteriores.Por lo tanto, es importante reiniciar la variable
mask
a0b1
al comienzo de cada iteración del bucle externo.