次の方法で共有


算術変換

多くのバイナリ演算子 (「Expressions with Binary Operators (バイナリ演算子を含む式)」を参照) では、オペランドの変換が発生し、生じる結果も同様に変換されます。 これらの演算子で変換が発生する方法は、"通常の算術変換" と呼ばれます。 異なるネイティブ型のオペランドの算術変換は、次の表に示すように実行されます。 typedef 型は、基になるネイティブ型に従って動作します。

型変換の条件

満たされる条件

変換

どちらかのオペランドが long double

もう一方のオペランドが long double 型に変換されます。

上の条件が満たされず、どちらかのオペランドが double

もう一方のオペランドが double 型に変換されます。

上の条件が満たされず、どちらかのオペランドが float

もう一方のオペランドが float 型に変換されます。

上の条件が満たされていない (どちらのオペランドも浮動小数点型ではない)

オペランドに次のように整数の上位変換が実行されます。

  • どちらかのオペランドが unsigned long 型の場合、もう一方のオペランドは unsigned long 型に変換されます。

  • 上の条件が満たされず、どちらかのオペランドが long 型で、もう一方が unsigned int 型である場合、両方のオペランドが unsigned long 型に変換されます。

  • 上の 2 つの条件が満たされず、どちらかのオペランドが long 型である場合、もう一方のオペランドが long 型に変換されます。

  • 上の 3 つの条件が満たされず、どちらかのオペランドが unsigned int 型である場合、もう一方のオペランドは unsigned int 型に変換されます。

  • 上の条件がどれも満たされない場合、両方のオペランドは int 型に変換されます。

次のコードは、表で説明している変換規則を示しています。

// 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 に代入されます。

参照

関連項目

標準変換