[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