OT Ceckarsky kviz

Miroslav Šinko sinkomiro@gmail.com
Čtvrtek Březen 5 16:15:35 CET 2009


S tymto istym tvrdenim som sa uz stretol, ale podla normy pravdive nie
je. Nasiel som kapitolu "Usual arithmetic conversions", ktora
pojednava o konverziach operandov vyrazov. Nejdem to tu cele
kopirovat, pre celociselne typy je tych pravidiel viac, pre Vasu
otazku je podstatne toto:

If both operands have the same type, then no further conversion is needed.

Otherwise, if both operands have signed integer types or both have unsigned
integer types, the operand with the type of lesser integer conversion rank is
converted to the type of the operand with greater rank.
(kde ranky su definovane vyssie v zmysle long int > int > short >...)

Z toho mne vyplyva, ze nezalezi na poradi, ten "mensi" sa vzdy
skonvertuje na "vacsi".

Dalej treba pozerat aj na jednotlive operatory. Napr. bitovy OR ma
uvedene, ze pouziva iba "Usual arithmetic conversions", ale bitovy
posun << ma uvedene, ze oba operandy su konvertovane na int a aj
vysledok bude int.

Preto to v pripade GetVal() | GetVal<<8 na MSVC (32-bit) aj GCC
(pocitam, ze min 16-bit) fungovalo.
1. Vyhodnotili sa vyrazy pre OR:
a) GetVal() - volanie funkcie, vysledok BYTE
b) GetVal()<<8 - volanie funkcie, vysledok BYTE; konverzia vysledku na
int kvoli <<; konverzia 8 na int; vysledok posunu v int
2. Pred operaciou | sa prvy vyraz v sulade s "Usual.." skonvertoval na int
3. Konecny vysledok je int; orezal sa na WORD (mimochodom na toto mi
MSVC hodil warning, ze mozem prist o data)

miro


2009/3/5 Petr Tošovský <PetrTosHW@ptmodel.cz>:
> Nemuzu se do takovych hloubkovych debat zapojovat coby programator
> samorost a navic jen stylem pokus-omyl do soucasne doby, ale mam
> zapamatovano, ze typ celeho vyrazu se (nevim jestli ve vsech
> kompilatorech) urcuje podle prvniho clenu. Tudiz by to pretypovani
> nebylo jen jistota u posunu, ale nutnost pred prvnim clenem vyrazu
> (vysledek funkce GetByte je 8 bitovy), aby bylo kam vubec ORem pricist
> horni byte?
> Coz by tedy platilo v tomto pripade pro 8 bitove architektury. Je to
> skutecne tak nebo to timhle zpusobem delam zbytecne? Predem diky za
> vysvetleni.
> Jinak krasny priklad a rozbor vyhodnoceni a volani funkci, pekna ukazka.
>
> Tosa



Další informace o konferenci Hw-list