コード行があります
double i = 1 + (long)1.5* 5.0f
私の質問は、変換順序と結果は何ですか? このような例を探していましたが、役に立ちませんでした。それを理解するのに役立つ良いガイドはありますか?
コード行があります
double i = 1 + (long)1.5* 5.0f
私の質問は、変換順序と結果は何ですか? このような例を探していましたが、役に立ちませんでした。それを理解するのに役立つ良いガイドはありますか?
私の質問は、変換順序と結果は何ですか?
キャストが に適用され、値を持つ が1.5
与えられます。long
1
float
これは、 with の乗算に変換され、 with value5.0f
が与えられます。float
5.0f
1
はその値との加算のために に変換され、 with valuefloat
が与えられます。float
6.0f
double
最後に、それは(値を保持したまま) に昇格され、6.0
に割り当てられi
ます。
これは、小さな整数を正確に表すことができるクレイジーでない浮動小数点形式を想定しています。そうしないと、丸め誤差が発生する可能性があります。
乗算の結果をキャストする場合は、括弧を使用して演算子の優先順位を制御します。
double i = 1 + (long)(1.5* 5.0f); // = 8.0
または、括弧の使用を強制する C++ スタイルのキャストを使用します。
double i = 1 + static_cast<long>(1.5* 5.0f)
それを理解するのに役立つ良いガイドはありますか?
ここに 1 つがあります: http://en.cppreference.com/w/cpp/language/operator_precedence。型キャストは乗算よりも優先順位が高いことに注意してください。乗算は加算よりも優先されます (3 対 5 対 6)。
この表からわかるように、キャスト演算子は乗算よりも優先されますが、アドバイスに従って括弧を使用してください。
キャスト演算子の優先順位がわからない場合は、(頭の中で) 式を書き直してください。
(long)1.5 * 5.0
に
5.0 * (long)1.5
ここでは、何が優先され、最初のバージョンと同じであるかは明らかです