Udostępnij za pośrednictwem


Konwersje arytmetyczny

Wielu operatorów binarnych (omówione w wyrażeń z operatorami binarne) powodują konwersji operandy i dają wyniki w taki sam sposób.Sposób, w jaki te podmioty gospodarcze powodują konwersji nazywa się "zwykłe konwersje arytmetycznych." Arytmetyczne konwersje operandów różnych typów macierzystym są wykonywane jak pokazano w poniższej tabeli.Element TypeDef typów zachowywały się zgodnie z ich podstawowych typów macierzystym.

Warunki dotyczące konwersji typu

Spełnione warunki

Konwersja

Albo operand jest typu longdouble

Inne operand jest konwertowany na wpisz longdouble

Poprzedzające warunek nie jest spełniony i albo operand jest typu double.

Inne operand jest konwertowany na wpisz double.

Poprzedzające niespełnione warunki oraz albo operand jest typu pływaka.

Inne operand jest konwertowany na wpisz pływaka.

Poprzedzającego nie są spełnione warunki (Brak operandy są przestawne typów).

Promocje integralną są wykonywane na operandy w następujący sposób:

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

  • Jeżeli poprzedzający warunek nie spełnione i albo operand jest typu long i inne tego typu unsignedint, oba operandy są konwertowane na wpisz unsigned long. 

  • Dwa powyższe warunki nie są spełnione i albo operand jest typu long, drugiego operandu jest konwertowany na wpisz long.

  • 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 poprzednich warunki są spełnione oba operandy są konwertowane na wpisz int.

Poniższy kod ilustruje reguły konwersji, opisane w tabeli:

// arithmetic_conversions.cpp
double dVal;
float fVal;
int iVal;
unsigned long ulVal;

int main() {
   // iVal converted to unsigned long
   // result of multiplication converted to double
   dVal = iVal * ulVal;

   // ulVal converted to float
   // result of addition converted to double
   dVal = ulVal + fVal;
}

Pierwsza instrukcja w poprzednim przykładzie pokazuje mnożenia dwa typy integralną, iVal i ulVal.Warunek, spełnione jest, że ani operand jest typu przestawne i jeden operand jest typu unsigned int.W związku z tym, drugiego operandu, iVal, jest konwertowany na wpisz unsigned int.Wynik jest przypisany do dVal.Warunek spełniony jest, że jeden operand jest typu double; w związku z tym unsigned int wynik mnożenia jest konwertowany na wpisz double.

Druga instrukcja w poprzednim przykładzie pokazuje dodanie pływaka i typem całkowitym fVal i ulVal.ulVal Zmienna jest konwertowany na wpisz pływaka (trzeci warunek w tabeli).Wynik dodawania jest konwertowany na wpisz double (drugi warunek w tabeli) i przypisany do dVal.

Zobacz też

Informacje

Konwersji standardowych