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:
Come esempio viene inserito il numero 65000 e il programma da il seguente risultato: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 */
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!!
![]()

Rispondi quotando
