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