Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Operatori di scorrimento e maschere!..
Forum - C/C++ - Operatori di scorrimento e maschere!..

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 1:00
Giovedì, 01/01/1970
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++

  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. int main (int argc, char **argv){
  5.  
  6.         int value, count;
  7.  
  8.         printf("Inserisci intero\n");
  9.         scanf("%d", &value);
  10.  
  11.         for(count=16; count>=0; count--){
  12.                 printf("%d", (value >> count) & 0x01);
  13.         }
  14.         printf("\n");
  15. }



mi converte in binario i numeri inseriti, o meglio non riesco a capire cosa fa la stringa

Codice sorgente - presumibilmente Plain Text

  1. 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??..

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 10:19
Martedì, 06/07/2010

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 10:25
Martedì, 06/07/2010
Sei un grande thekaneB... :k:

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6379
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 11:01
Martedì, 06/07/2010
Testo quotato

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à.
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 11:22
Martedì, 06/07/2010
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 :)

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 11:27
Martedì, 06/07/2010
prego :-) mi piace la gente che impara in fretta!

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6379
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 18:59
Martedì, 06/07/2010
Testo quotato

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à.
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 8:45
Mercoledì, 07/07/2010
Testo quotato

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!..

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 9:11
Mercoledì, 07/07/2010
@nessuno:

Ciao ho provato come hai detto tu, e ho scritto solamente cosi

Codice sorgente - presumibilmente C++

  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. int main (int argc, char **argv){
  5.  
  6.         int value, i;
  7.  
  8.         printf("Inserisci il valore in decimale da convertire\n");
  9.         scanf("%d", &value);
  10.  
  11.         for(i=15; i>=0; i--){
  12.                 printf("%d", value & 0x01);
  13.         }
  14.         printf("\n");
  15. }


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
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo