[elektro] Munka (C kérdés)
Andrei Purdea
purdea.andrei at gmail.com
Sat Sep 17 15:23:08 CEST 2011
> 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)
More information about the Elektro
mailing list