Sdílet prostřednictvím


Obvyklé aritmetické převody

Většina operátorů jazyka C provádí převody typů pro přiblížení operandů výrazu k běžnému typu nebo pro rozšíření hodnot typu short na velikosti typu integer, které jsou používány při operacích v počítači.Převody prováděné operátory jazyka C závisí na určitém operátoru a na typu operandu nebo operandů.Mnoho operátorů však provádí podobné převody s operandy integrálních typů a typů s pohyblivou řádovou čárkou.Tyto převody jsou známé jako "aritmetické převody." Převod hodnoty operandu na kompatibilní typ způsobí, že jeho hodnota není změněna.

Aritmetické převody uvedené níže, se nazývají "obvyklé aritmetické převody." Tyto kroky platí pouze pro binární operátory, které očekávají aritmetický typ.Cílem je dosáhnout společného typu, který je také typ výsledku.Pro zjištění, které převody byly ve skutečnosti použity, použije kompilátor na binární operátory ve výrazu, následující algoritmus.Následující kroky nerespektují pořadí priorit.

  1. Je-li jeden z operandů typu long double, je druhý operand převeden na typ long double.

  2. Není-li výše uvedená podmínka splněna a jeden z operandů je typu double, je druhý operand převeden na typ double.

  3. Nejsou-li splněny dvě podmínky uvedené výše a jeden z operandů je typu float, je druhý operand převeden na typ float.

  4. Nejsou-li splněny tři podmínky uvedené výše (žádný z operandů není typu float), jsou provedeny integrální převody operátorů takto:

    • Je-li operand typu unsigned long, je jiný operand převeden na typ unsigned long.

    • Není-li výše uvedená podmínka splněna a jeden z operandů je typu long a druhý operand je typu unsigned int, jsou oba operandy převedeny na typ unsigned long.

    • Nejsou-li splněny dvě podmínky uvedené výše a jeden z operandů je typu long, je druhý operand převeden na typ long.

    • Nejsou-li splněny tři podmínky uvedené výše a jeden z operandů je typu unsigned int, je druhý operand převeden na typ unsigned int.

    • Není-li splněna žádná z podmínek uvedených výše, jsou oba operandy převedeny na typ int.

Následující kód tyto pravidla převodu znázorňuje:

float   fVal;
double  dVal;
int   iVal;
unsigned long ulVal;

dVal = iVal * ulVal; /* iVal converted to unsigned long
                      * Uses step 4.
                      * Result of multiplication converted to double 
                      */
dVal = ulVal + fVal; /* ulVal converted to float
                      * Uses step 3.
                      * Result of addition converted to double 
                      */ 

Viz také

Referenční dokumentace

Operátory jazyka C