Sdílet prostřednictvím


Obvyklých aritmetických převody

Většina operátorů c provádět převody typu přenést operandy výraz společný typ nebo rozšířit krátké hodnoty použité v počítači operace velikost celé číslo.Převody prováděné subjekty c závisí na konkrétní operátor a typ operandu nebo operandy.Mnoho operátorů však provádět převody podobné operandy typu nedílnou a plovoucí.Tyto převody jsou známé jako "aritmetické převody." Převod hodnoty operand kompatibilní typ způsobí bez změny jeho hodnotu.

Aritmetické převody shrnuta níže, se nazývají "obvyklých aritmetických převody." Tyto kroky jsou použity pouze pro binární operátory, které aritmetické typ očekávat.Účelem je výnos společného typu, který je také typ výsledku.Chcete-li zjistit, jaké převody projeví, kompilátor platí následující algoritmus pro binární operací ve výrazu.Následující kroky jsou pořadí přednosti.

  1. Pokud je buď operand typu long double, s druhým operandem je převést na typ long double.

  2. Pokud výše uvedené podmínky nejsou splněny, a buď operand je typu dvojité, s druhým operandem je převést na typ dvojité.

  3. Pokud nejsou splněny výše uvedené podmínky dva a obou operand je typu plovoucí, s druhým operandem je převést na typ plovoucí.

  4. Pokud nejsou splněny výše uvedené tři podmínky (žádné operandy jsou plovoucí typy), pak nedílnou převody se provádějí s operandy takto:

    • Pokud je buď operand typu unsigned long, s druhým operandem je převést na typ unsigned long.

    • Pokud výše uvedené podmínky nejsou splněny, a buď operand je typu dlouhý a jiné typu unsigned int, jsou oba operandy převést na typ unsigned long.

    • Pokud nejsou splněny výše uvedené podmínky dva a obou operand je typu dlouhý, s druhým operandem je převést na typ dlouhý.

    • Pokud nejsou splněny výše uvedené tři podmínky a buď operand je typu unsigned int, s druhým operandem je převést na typ unsigned int.

    • Pokud žádný z výše uvedené podmínky splněny, jsou oba operandy převést na typ int.

Tato pravidla převodu ilustruje následující kód:

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

C subjekty