gingardu:
c'è qualche anima pia che spiega meglio che puo cosa fanno queste righe di codice sopratutto l'ultima
orcalogia metti il codice tra i tag code che non si campisce una bega
negative=data[47]; // check for a negative number
for(x=25; x<48; x++) // ingore redundant first 24 bits
{
reading=reading+(data[x]*pow(2,x-25)); // add 2^ for each bit
negative=data[47];
direi che non ha bisongno di spiegazioni
poi dall'elemento 25 al 47 (c'è il <), per ognuno ne prende il valore e lo usa come esponente (ma l'esponente parte da 0 a 47-25) per una potenza in base 2, poi lo somma al risultato dei valori precedenti.
è un modo per compattare i valori di data in una unica variabile, però dando per scontato che data contega solo 1 o 0. in teoria avrebbe fatto molto prima facendo
reading = (reading << 1)+(data[x]&0x01)
però partendo dall'elemento 47 fino al 25
poi invece magari data assume altri valori e la cosa è un calcolo che ha un significato differente... senza maggiori informazioni non posso dire altro.