[elektro] C aritmetika értetlenség
Skandar Graun
sgraun at gmail.com
Thu Dec 26 13:09:54 CET 2013
Sziasztok!
Nem teljesen értem a problémát, ezért hozzátok fordulnék.
A kérdéses fordító C18
Adott egy tömb,
unsigned char sbuffer[16];
Ebbe sorosan jönnek be az adatok.
Ebből csinálnék én egy long változót, nem akartam bűvészkedni az
unionokkal, structokkal.
unsigned long huzo_1_pos;
huzo_1_pos = 65536*sbuffer[5] + 256*sbuffer[4] + sbuffer[3];
A probléma a következő:
A bejövő adat sor: 0x20, 0x7f, 0xff
Erre a húzó_1_pos: 0xffff7f20
Eddig jó (bár a legelső ff kissé furcsa)
De ha a bejövő adat: 0x2e; 0x82, 0xff
Akkor a művelet végerdeménye: 0xfffe822e
Olyan, mintha az alsó 16 bites adat legmagasabb bitjének 1 értéke esetén
egyet levonna a következő fél értékéből. Ezt elég stabilan tudja más
értékeknél is.
A kiíratás egyszerű:
sprintf(data1,"%8lx",huzo_1_pos);
putsXLCD(data1,1);
Valami aritmetikai nemtudommi az oka, csak nem értem, ennek köszönhetően
nem is tudom elhárítani. Tüneti kezelést meg nem akarok alkalmazni.
More information about the Elektro
mailing list