算術変換
多くのバイナリ演算子 (「Expressions with Binary Operators (バイナリ演算子を含む式)」を参照) では、オペランドの変換が発生し、生じる結果も同様に変換されます。 これらの演算子で変換が発生する方法は、"通常の算術変換" と呼ばれます。 異なるネイティブ型のオペランドの算術変換は、次の表に示すように実行されます。 typedef 型は、基になるネイティブ型に従って動作します。
型変換の条件
満たされる条件 |
変換 |
---|---|
どちらかのオペランドが long double 型 |
もう一方のオペランドが long double 型に変換されます。 |
上の条件が満たされず、どちらかのオペランドが double 型 |
もう一方のオペランドが double 型に変換されます。 |
上の条件が満たされず、どちらかのオペランドが float 型 |
もう一方のオペランドが float 型に変換されます。 |
上の条件が満たされていない (どちらのオペランドも浮動小数点型ではない) |
オペランドに次のように整数の上位変換が実行されます。
|
次のコードは、表で説明している変換規則を示しています。
// 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;
}
上記の例の最初のステートメントは、2 つの整数型、iVal と ulVal の乗算を示しています。 満たされる条件は、どちらのオペランドも浮動小数点型ではなく、一方のオペランドが unsigned int 型であることです。 したがって、もう一方のオペランドである iVal は unsigned int 型に変換されます。 結果は dVal に代入されます。 満たされる条件は、一方のオペランドが double 型であることです。したがって、乗算の unsigned int の結果は double 型に変換されます。
上記の例の 2 番目のステートメントは、float および整数型の fVal と ulVal の加算を示しています。 ulVal 変数は float 型に変換されます (表の 3 番目の条件)。 加算の結果は、double 型に変換され (表の 2 番目の条件)、dVal に代入されます。