PROBLEMA Capire cosa fa questo programma

Pubblicità

KIKOB

Nuovo Utente
Messaggi
1
Reazioni
0
Punteggio
24
Salve a tutti,
avreibisogno di capire cosa fa in pratica questo semplice programma essendo un poco ingnorante nel liguaggio C.
Grazie.

#include <stdio.h>

void calc_crc(unsigned int *pCrc, unsigned char uData)


{

int iBit;

for (iBit = 0;iBit<8;iBit++,uData>>=1)

{

if((uData^*pCrc)&0x01)

{

*pCrc>>=1;

*pCrc^=0xA001;

}

else

*pCrc>>=1;

}

}
 
Il ciclo for gira 8 volte e a ogni iterazione il contenuto di uData viene shiftato verso destra di una posizione (parliamo di bitwise operator, ovvero operazioni sui bit).
Nell'if viene eseguita, bit a bit, l'operazione (uData XOR *pCrc) AND 0x01.
In pratica fa lo XOR bit a bit tra uData e il valore puntato da pCrc, e il risultato dello XOR viene usato nell'AND con il byte 0x01, ovvero 00000001.
Il risultato sarà per forza 0x0000 (se lo XOR ha restituito un valore dispari, cioè con un 1 nella posizione meno significativa) o 0x0001 (altrimenti).
Se il risultato è 0x0001, viene shiftato a destra il contenuto del puntatore ed effettuato lo XOR con 0xA001, altrimenti solo shifato a destra.
Personalmente avrei tenuto lo shift fuori dall'if, visto che viene sempre eseguito...
 
Pubblicità
Pubblicità
Indietro
Top