[elektro] Munka (C kérdés)
hg12345
hg12345 at freemail.hu
Sat Sep 17 17:55:51 CEST 2011
Köszönöm,
pont ezt kerestem, hogy miért igy csinálja.
Amúgy sokkal egyszerűbb <0xFFFF feltétellel vizsgálni...
Üdv
Andrei Purdea <purdea.andrei at gmail.com> írta:
>> Ez miért nem müködik?>
>>
> uint16_t count;>
>>
> if (~count)>
> count++;>
>
http://std.dkuug.dk/jtc1/sc22/open/n2794/n2794.pdf>
nézd a 70-es oldalon (82-es pdf oldal) a 4-es bejegyzést>
>
A C99 standard szerint, negálás előtt a count változó promoválva van>
egy 32bites tipusra.>
Mivel unsigned (uint16_t), ezért ez azt jelenti hogy balról meg van>
tűzdelve egy rakás zéróval, ami mindig zéró marad. A ~count ezért>
mindig non-zéró marad, tehát igaz.>
>
Az újracastolás helyett egy másik megoldás: Ha a változód tipusa>
int16_t (signed), akkor a promóció alkalmával sign-extended lesz,>
mármint>
a sign bit-el van megtűzdelve balról. így amikor count=0xffff, akkor>
promoted formában 0xffffffff. És a count nincs növelve amikor eléri a>
0xffff-t (vagyis a -1-et)>
>
----------------------------------------->
elektro[-flame|-etc]>
More information about the Elektro
mailing list