La for e l'espressione nella printf servono ad effettuare la conversione decimale-binario.Originariamente inviato da ^NeXsUs^
visualizza 2 e incrementa i
giusto ??![]()
Non punitemi
Approfittando della vostra gentilezza
printf("\nRisultato con il 2° algoritmo: [");
for (i=7;i>=0;i--)
printf(" %d",!!((1<<i)&nn)); <------ hem -.- ??
printf(" ]\n");
Per ogni bit in un byte (da 7 a 0) viene fatto
1) lo shift a sinistra del valore 1 per il numero di bit equivalenti al contatore. Durante il ciclo dallo shift 1<<i si otterranno i valori
128 (1<<7)
64 (1<<6)
32 (1<<5)
16 (1<<4)
8 (1<<3)
4 (1<<2)
2 (1<<1)
1 (1<<0)
2) ad ogni giro del ciclo, veiene effettuato l'and bit at bit con il valore nn che e' quello da convertire. Si otterra' 0 se il bit corrispondente e' a 0, uno dei valori indicati nella colonna precedente se il bit e' a 1. Ad esempio, se nn vale 170 si avra' il risultato
128
0
32
0
8
0
2
0
3) il primo not fatto sul risultato dell'espressione restituisce 0 per qualsiasi valore diverso da 0 e 1 per il valore 0. Si ha quindi
0 (!128)
1 (!0)
0 (!32)
1 (!0)
0 (!8)
1 (!0)
0 (!2)
1 (!0)
4) a questo punto pero' il risultato e' invertito rispetto al risultato effettivo e quindi il secondo not rimette tutto a posto
1 (!0)
0 (!1)
1 (!0)
0 (!1)
1 (!0)
0 (!1)
1 (!0)
0 (!1)


Rispondi quotando