Udostępnij za pośrednictwem


Zwykle konwersje arytmetyczny

Większość operatorów c wykonywać konwersje typów doprowadzić operandy wyrażenie typu wspólnego lub rozszerzenia krótkie wartości rozmiar liczby całkowitej w operacjach maszyny.Konwersje, wykonywane przez operatorów c zależy od danego przewoźnika lotniczego i typ operandzie lub operandach.Jednak wielu operatorów wykonywać podobne konwersje operandy typu integralną i pływające.Konwersje te są znane jako "konwersje arytmetycznych." Konwersja wartości operandu na zgodne z typem nie powoduje żadnych zmian do jej wartości.

Konwersje arytmetyczne, poniżej podsumowano są nazywane "zwykłe konwersje arytmetycznych." Te kroki są stosowane tylko dla operatorów binarnych, które oczekują, że typ arytmetycznych.Celem jest plon wspólnej typu, dla którego jest również typu wyniku.Aby określić, które konwersje faktycznie miejsce, kompilator dotyczy następującego algorytmu: binarne operacji w wyrażeniu.Poniższe kroki nie są kolejność pierwszeństwa.

  1. Jeśli albo operand jest typu long double, inne operand jest konwertowany na wpisz long double.

  2. Jeśli powyższy warunek nie jest spełniony i albo operand jest typu double, inne operand jest konwertowany na wpisz double.

  3. Jeśli dwa powyższe warunki nie są spełnione i albo operand jest typu pływaka, inne operand jest konwertowany na wpisz pływaka.

  4. Jeśli powyższe trzy warunki nie są spełnione (Brak operandy są przestawne typy), a następnie integralną konwersje są wykonywane na operandy w następujący sposób:

    • Jeśli albo operand jest typu unsigned long, inne operand jest konwertowany na wpisz unsigned long.

    • Jeśli powyższy warunek nie jest spełniony i albo operand jest typu long i inne tego typu unsigned int, oba operandy są konwertowane na wpisz unsigned long.

    • Jeśli dwa powyższe warunki nie są spełnione i albo operand jest typu long, inne operand jest konwertowany na wpisz long.

    • Jeśli powyższe trzy warunki nie są spełnione i albo operand jest typu unsigned int, inne operand jest konwertowany na wpisz unsigned int.

    • Jeśli żaden z powyższych warunków nie są spełnione oba operandy są konwertowane na wpisz int.

Poniższy kod ilustruje te reguły konwersji:

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 
                      */ 

Zobacz też

Informacje

C podmioty gospodarcze