Jedna lepiaca (ako spojit dva bajty do int)

Jan Waclawek konfera na efton.sk
Čtvrtek Leden 5 15:38:24 CET 2017


>Nejsou tam volatile
>a přetypování (int8_t)
>v tomto případě zcela zbytečné? 

volatile je len kvoli prikladu, inteligentny prekladac cely program bez
neho vyoptimaluzuje. Mohol by som to namiesto toho prekladat ako
samostatnu funkciu samozrejme.

Bez pretypovania bl na int8_t (resp. vzhladom na tu nedavnu debatu zrejme
spravnejsie int_least8_t) dojde u procesorov, kde int je 16-bitovy, pri
nasobeni k preteceniu. Ano, v 99.9% praktickych prikladov to nevadi a to
pretecenie vlastne "spravne" umiestni znamienkovy bit, ale uloha bola
napisat to spravne.

Na druhej strane uznavam, ze samotne pretypovanie uint8_t bl na int8_t je
tiez implementation defined, cize ani ten moj postup nie je spravny, a
treba to urobit na 100% spravne, tj. porovnat povodny bl voci 128 a ak je
vacsi, zapornu hodnotu urcit vypoctom (t.j. treba urobit rucne konverziu z
dvojkoveho komplementu, co je dane ako vstup, na lubovolnu architekturu).

wek




Další informace o konferenci Hw-list