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:
|
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.