OT Ceckarsky kviz
Lukáš Grepl
L.Grepl@sh.cvut.cz
Čtvrtek Březen 5 14:29:09 CET 2009
> Mam nejaku funkciu, nazvime ju GetByte(), ktora mi vrati byte
> (uint8_t), napriklad z nejakej komunikacnej linky, alebo z nejakeho
> kruhoveho bufferu. Na tej linke alebo v tom bufferi je ulozene
> 16-bitove cislo, LSB first, a ja ho citam takto:
>
> uint16_t a = GetByte() | GetByte() << 8;
>
> Je to takto dobre?
<< má větší prioritu než |, takže v tom by problém být neměl, před
posunem hodnota převede na int, takže pokud má int alespoň 16 bitů, tak
by v tom také neměl být problém. Asociativita | je zleva doprava, takže
pořadí volání funkcí by také mělo být snad správné.
Dovedu si představit, že by se u pedantičtějšího kompilátoru možná
objevilo varování o možném přetečení při konverzi typů (int na uint16_t).
Teoreticky se mi to zdá správné a prakticky vrací kompilátory na kterých
jsem to zkoušel očekávané výsledky. Ale když se takhle ptáte, tak tam
asi nějaký problém bude :-).
Lukáš Grepl
Další informace o konferenci Hw-list