Salve a tutti,

sto studiando gli operatori bitwise e ho subito alcuni dubbi che non riesco a risolvere (tra google e prove)!!
Sul mio libro è presente la seguente descrizione dell'operatore AND bitwise: i bit del risultato sono impostati a 1, se quelli corrispondenti dei due operandi sono entrambi 1.
Fin qui, sembra tutto chiaro.
Poi il testo fa il seguente esempio:

codice:
 /*  Printing an unsigned integer in bits */

#include <stdio.h>



void displayBits( unsigned value ); /* prototype */



int main( void )

{ 

   unsigned x; /* variable to hold user input */



   printf( "Enter an unsigned integer: " );

   scanf( "%u", &x );



   displayBits( x );

   

   return 0; /* indicates successful termination */



} /* end main */



/* display bits of an unsigned integer value */

void displayBits( unsigned value )

{ 

   unsigned c; /* counter */



   /* define displayMask and left shift 31 bits */

   unsigned displayMask = 1 << 31; 



   printf( "%10u = ", value );



   /* loop through bits */ 

   for ( c = 1; c <= 32; c++ ) { 

      putchar( value & displayMask ? '1' : '0' );

		printf("%d\n", value & displayMask);


      value <<= 1; /* shift value left by 1 */   



      if ( c % 8 == 0 ) { /* output space after 8 bits */

         putchar( ' ' );

      } /* end if */



   } /* end for */



   putchar( '\n' );

} /* end function displayBits */
Come esempio viene inserito il numero 65000 e il programma da il seguente risultato:

00000000 00000000 11111101 11101000

che effettivamente corrisponde a 65000 scritto in binario.

Ecco i miei dubbi.
value rappresenta la sequenza di bit:
10000000 00000000 00000000 00000000
che corrisponde al numero 2^31 = 2147483648

quando value viene confrontato con un altro numero attraverso l'AND bitwise, il risultato sarà
00000000 00000000 00000000 00000000 ossia 0
oppure
10000000 00000000 00000000 00000000 ossia 2^31 = 2147483648

dato che 2^31 > 0, esso viene valutato come VERO e un uno viene stampato.
Fin qui è corretto quello che ho detto?

La cosa strana è che se faccio printf("%d\n", value & displayMask); all'interno del loop for ottengo una lista di due output:
00 e
1-2147483648

Come mai c'è "1-" davanti al numero che mi aspetto?
Altra domanda: non c'è un modo più semplice (diretto) per stampare i bit di un numero?

Grazie a tutti!!