[elektro] cé típus

SZIGETI Szabolcs szigiszabolcs at gmail.com
Fri May 16 09:43:39 CEST 2014


Hali!

Hogy az utolsó miért nem működik, az egy jó kérdés, de megjegyzés az előtte
lévő példákhoz.

Ha két int-tel végzel művelet, akkor az eredmény int lesz, minden esetleges
alul-, túlcsordulással és csonkolással. Ezt hiába rakod long-ba, nem segít.
Arra kell kényszeríteni a C fordítót, hogy eleve longokkal végezzen
műveletet. Tehát arra vigyázz, hogy ne a kifejezés eredményét, hanem a
tago(ka)t castold.

Analóg módon a

double a;
int x=5;
int y=2;

esetében az
a=x/y esetén a értéke 2.0 lesz, a=(double)(x/y) szintén,
a=(double)x/y viszont a helyes 2.5 értéket fogja adni, mert nem int, hanem
float osztást fog alkalmazni.

Én megnézném, hogy milyen assembly-t generál a fordító, abból eldönthető,
hogy jó-e vagy sem. Milyen konkrét értékre kaptad ezt?

Szabolcs




2014. május 16. 8:12 Skandar Graun írta, <sgraun at gmail.com>:

> Sziasztok!
>
> PIC C18
>
> int     h1_prop_err;
> int     huzo_1_cel;
> int      huzo_1_pos;
>
> huzo_1_pos = 100;
> huzo_1_cel = 400;
>
> h1_prop_err = huzo_1_cel - huzo_1_pos;
>
> így jó.
>
> De ha:
>
> long     h1_prop_err;
> int     huzo_1_cel;
> int      huzo_1_pos;
>
> h1_prop_err = huzo_1_cel - huzo_1_pos;
>
> akkor nem jó, a long változó második byte-jába bejön egy 0x5f érték
>
> ha:
>
> long     h1_prop_err;
> int     huzo_1_cel;
> int      huzo_1_pos;
>
> h1_prop_err = (long)(huzo_1_cel - huzo_1_pos);
>
> akkor is.
>
> ha:
>
> long     h1_prop_err;
> int     huzo_1_cel;
> int      huzo_1_pos;
>
> h1_prop_err = ((long)huzo_1_cel - (long)huzo_1_pos);
>
> akkor is.
>
> Ha kimaszkolom &0x0ffff-el, akkor eltűnik, de akkor nem tudom kezelni a
> negatív számokat.
>
> Mi nem jó?
> -----------------------------------------
>           elektro[-flame|-etc]


More information about the Elektro mailing list