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