[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