[elektro] C aritmetika értetlenség
potyo
potyo.ada at gmail.com
Thu Dec 26 13:18:04 CET 2013
Próbáld így: huzo_1_pos = 65536UL*sbuffer[5] + 256U*sbuffer[4] + sbuffer[3];
Vagy: huzo_1_pos = 65536*(unsigned long)sbuffer[5] +
256*(unsigned)sbuffer[4] + sbuffer[3];
A gond az lehet, hogy ha te két 8 bites változót összeszorzol, akkor annak
az eredményét is 8 biten képzi a fordító, így csak az eredmény alsó bájtját
kapod meg. Ezért legalább az egyiket castolni kell 16 bitre (vagy amennyire
szükség van), hogy a rendes eredményt kapd. Esetedben a 65536*sbuffer[5]
eredményének csak az alsó 16 bitjét veszi figyelembe a továbbiakban, azt
adja össze a 256*sbuffer[4] alsó 8 bitjével, majd adja hozzá a
sbuffer[3]-at. Vagy legalábbis én ezt sejtem a háttérben. Esetleg a 256-ot
is 16 bitesnek veszi, mert olyan is lehet, fordítótól függ. Mindenesetre az
UL utótag a szám után, vagy az (unsigned long) a változónál elvileg
megoldja ezt a problémát. Aztán ha mégsem azt kapod, amit szeretnél, akkor
is ezt hagyd így, és megyünk tovább.
2013. december 26. 13:09 Skandar Graun írta, <sgraun at gmail.com>:
> huzo_1_pos = 65536*sbuffer[5] + 256*sbuffer[4] + sbuffer[3];
More information about the Elektro
mailing list