ciao a tutti!
Chiedo aiuto su un programma che utilizza i bitwise, vi posto il codice
codice:
/* Il programma visualizzerà un intero unsigned nella sua rappresentazio
* ne binaria, suddividendola in gruppi di otto bit. */
#include <stdio.h>
void displayBits( unsigned value );
int main()
{
unsigned x; // variabile destinata a contenere l'input dell'utente
printf("Inserisci un intero unsigned: ");
scanf("%u", &x);
displayBits(x);
return 0;
}
// Visualizza i bit di un valore intero senza segno
void displayBits( unsigned value )
{
unsigned c; // contatore
//dichiara dispalyMask ed esegue uno scorrimento a sinistra di 31bit
unsigned displayMask = 1 << 31;
printf("%10u = ", value);
// itera scorrendo i bit
for ( c=1; c <= 32; c++ ) {
putchar(value & displayMask ? '1' : '0');
value <<= 1; // esegue scorrimento a sinistra di 1 su value
// manda in output uno spazio dopo 8 bit
if ( c % 8 == 0 ) {
putchar(' ');
}
}
putchar('\n');
}
Quello che non capisco è a cosa serve la variabile displayMask impostata come 1 << 31. Ho letto che serve come mascheramento ma non capisco la sua utilità
L'istruzione putchar(value & displayMask ? '1' : '0'); confronta i valori binari di value e di displayMask e dovrebbe restituire 1 se i bit a confronto sono entrambi impostati a 1 e 0 se sono diversi tra loro; ma in questo caso dovrebbe stampare solo zeri in quanto la variabile displayMask, spostando tutti i bit a sinistra di 32 posizioni, contiene solo zeri?
Quindi come fà a stamparmi un numero in binario?
Spero che mi possiate dare una mano