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");
La for e l'espressione nella printf servono ad effettuare la conversione decimale-binario.

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)