[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