()
Newbie
Messaggi:
Iscritto:
|
Salve a tutti io sto iniziando a studiare gli operatori bit a bit!...
di scorrimento e la maschere!.. solo che non riesco a capire bene il loro funzioamento!.. Non capisco perché questo piccolo programmino
Codice sorgente - presumibilmente C++ |
#include <stdlib.h> #include <stdio.h> int main (int argc, char **argv){ int value, count; printf("Inserisci intero\n"); scanf("%d", &value); for(count=16; count>=0; count--){ printf("%d", (value >> count) & 0x01); } printf("\n"); }
|
mi converte in binario i numeri inseriti, o meglio non riesco a capire cosa fa la stringa
Codice sorgente - presumibilmente Plain Text |
printf("%d", (value >> count) & 0x01)
|
in teoria fa lo spostamento verso destra di count, quindi prima di 0 poi di 1 ecc ecc... e poi applica una maschera and con 1...
e che significa??.. |
|
TheKaneB (Member)
Guru^2
Messaggi: 1792
Iscritto: 26/06/2009
|
|
|
()
Newbie
Messaggi:
Iscritto:
|
Sei un grande thekaneB...
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6381
Iscritto: 03/01/2010
|
Postato originariamente da giovybus:
che significa??.. |
Shift a destra di value per count bit. E poi prende il primo bit a destra.
In questo modo, il bit numero count viene portato nella posizione 0 e visualizzato.
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
()
Newbie
Messaggi:
Iscritto:
|
Quindi ragazzi fatemi capire se ho capito bene il funzionamento di questi operatori bit a bit nel sorgente di poco fa!..
qundi se io inserisco 5 in value tramite la scanf
parte questo ciclo in decremento perché sennò mi stampa i valori al contrario!..
e quindi comincia
000...0101 il 5prima dello shift
000...0000 dopo lo shift di 16 posti
effettua l'AND con il bit più significativo e stampa 0
.... 14cicli dopo (circa)
000...0101 il 5prima dello shift
000...0001 con uno shift di 2posti
effettua l'and con il bit più significativo e stampa 1...
quindi ora è ben chiaro perché eseguendo il programma e inserendo 5 in input l'ountput da
00000000000000101
Grazie
|
|
TheKaneB (Member)
Guru^2
Messaggi: 1792
Iscritto: 26/06/2009
|
prego :-) mi piace la gente che impara in fretta!
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6381
Iscritto: 03/01/2010
|
Postato originariamente da giovybus:
ountput |
output ...
Prova a scrivere lo stesso programma senza usare l'operatore >> ma solamente l'and
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
()
Newbie
Messaggi:
Iscritto:
|
Postato originariamente da TheKaneB:
prego :-) mi piace la gente che impara in fretta! |
mi è piaciuta la guida che mi hai fatto leggere ieri... ed è stata molto utile!.. |
|
()
Newbie
Messaggi:
Iscritto:
|
@nessuno:
Ciao ho provato come hai detto tu, e ho scritto solamente cosi
Codice sorgente - presumibilmente C++ |
#include <stdlib.h> #include <stdio.h> int main (int argc, char **argv){ int value, i; printf("Inserisci il valore in decimale da convertire\n"); scanf("%d", &value); for(i=15; i>=0; i--){ printf("%d", value & 0x01); } printf("\n"); }
|
però non funzina! e da quello che ho capito ieri è normale che non funzioni perché l'AND viene fatto con il bit più significativo di value:
quindi se io inserisco 5 il bit più significativo è 1 applicando la mschera AND a 1 la printf mi stamperà sempre 1...
invece se inserisco 4 stesso procedimento ma la printf mi stampa 0 perché il bit più significativo è 0!.. e quindi 0 & 1 = 0
Ultima modifica effettuata da il 07/07/2010 alle 9:13 |
|