Condividi tramite


Conversioni aritmetiche

Molti operatori binari (illustrati in Espressioni con gli operatori binari) causano conversioni degli operandi e restituiscono risultati nello stesso modo. La modalità in cui questi operatori causano le conversioni è denominata "conversioni aritmetiche consuete." Le conversioni aritmetiche degli operandi di tipi nativi differenti vengono eseguite come illustrato nella tabella seguente. I tipi typedef si comportano in base ai tipi nativi sottostanti.

Condizioni per la conversione di tipi

Condizioni soddisfatte

Conversion

Uno degli operandi è di tipo long double.

L'altro operando viene convertito nel tipo long double.

La condizione precedente non è soddisfatta e uno degli operandi è di tipo double.

L'altro operando viene convertito nel tipo double.

Le condizioni precedenti non sono soddisfatte e uno degli operandi è di tipo float.

L'altro operando viene convertito nel tipo float.

Le condizioni precedenti non sono soddisfatte (nessuno degli operandi sono di tipo a virgola mobile).

Le promozioni integrali vengono eseguite sugli operandi come indicato di seguito:

  • Se uno degli operandi è di tipo unsigned long, l'altro operando verrà convertito nel tipo unsigned long..

  • Se la condizione precedente non è soddisfatta e uno degli operandi è di tipo long e l'altro operando è di tipo unsigned int, entrambi gli operandi verranno convertiti nel tipo unsigned long.

  • Se le due condizioni precedenti non sono soddisfatte e uno degli operandi è di tipo long, l'altro operando verrà convertito nel tipo long.

  • Se le tre condizioni precedenti non sono soddisfatte e uno degli operandi è di tipo unsigned int, l'altro operando verrà convertito nel tipo unsigned int.

  • Se nessuna delle condizioni precedenti è soddisfatta, entrambi verranno convertiti nel tipo int.

Il codice seguente illustra le regole di conversione descritte nella tabella:

// 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;
}

La prima istruzione nell'esempio precedente mostra una moltiplicazione di due tipi integrali, iVal e ulVal. La condizione soddisfatta è che nessuno dei due operandi è di tipo a virgola mobile e che uno degli operandi è di tipo unsigned int. Quindi, l'altro operando iVal, viene convertito nel tipo unsigned int. Il risultato viene assegnato a dVal. La condizione soddisfatta è che un operando è di tipo double; pertanto, il risultato unsigned int della moltiplicazione viene convertito nel tipo double.

La seconda istruzione dell'esempio precedente mostra l'aggiunta di un tipo di integrale float e di un tipo integrale fVal e ulVal. La variabile ulVal viene convertita nel tipo float (terza condizione nella tabella). Il risultato dell'addizione viene convertito nel tipo double (seconda condizione nella tabella) e viene assegnato a dVal.

Vedere anche

Riferimenti

Conversioni standard