【初心者歓迎】C/C++室 Ver.28【環境依存OK】
■ このスレッドは過去ログ倉庫に格納されています
0346デフォルトの名無しさん
2006/06/18(日) 22:14:56(A) (double)(a+b)/2.0;
(B) (a+b)/2.0;
aとbはint型。(242の後者でaとbはshort型だが、式内での格上げで結局int型として扱われる)
だから(a+b)もA, B共にint型になる。
Aでは、それをdouble型にキャストして、2.0で割っている。Bではキャストせずに2.0で割っている。
2.0は浮動小数点リテラルで、接尾辞は何も付いていないから、double型。
つまりAは「double型の値 / double型の値」、Bは「int型の値 / double型の値」となる。
Aは除算演算子の両辺の型が同じdouble型だから、double型で除算が行われる。
Bは両辺の型が違うが、規格書ではこの場合両辺をdouble型にする事になっている。(規格書を各自見てくれ)
この際にint型の値をdouble型の値に変換する方法は、
int型の値をdouble型の値へキャスト演算子で変換する場合と全く同じである。(〃)
だからAもBも(型、値含め)全く同じ結果になる。
■ このスレッドは過去ログ倉庫に格納されています