PROBLEMA Capire cosa fa questo programma

KIKOB

Nuovo Utente
1
0
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;

}

}
 

1nd33d

Utente Attivo
653
279
CPU
Intel i5 3570K @ 4,5Ghz
Dissipatore
Scythe Mugen 2
Scheda Madre
Gigabyte Z77X-UD3H
HDD
Samsung 840 PRO 256GB + Sandisk Ultra 250GB + Sandisk Plus 960GB
RAM
2x8GB Crucial Ballistix Tactical @2000Mhz CL9
GPU
XFX RX480 GTR Black Edition
Audio
Auzentech X-Fi Forte
Monitor
AOC i2369VW
PSU
Seasonic P660
Case
eh?
Periferiche
Razer Naga HEX v2
OS
Windows 10 64bit - Linux Mint 18
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...
 

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili