BohYoh.comトップページへ
C & C++ FAQ
目次

C C++ long型でおさまるはずの数値の計算がうまくいかないことがあるのはどうしてですか。

 変数xlong型であるとして、

x = 700 * 100;

を考えましょう。700100を掛けた値である70000は、long型の表現範囲におさまっています。しかし、700 * 100は、int型どうしの乗算ですから、その演算結果もint型であることに注意してください。
 したがって、int型が32767までしか表現できない処理系であれば、オーバーフローが発生しますから右辺の値は70000とはならないのです。
 少なくとも一つのオペランドがlong型でなければなりませんから、たとえば

x = 700L * 100;

のようになっていなければなりません。

■ 根拠 ■
標準C §6.2 Conversions
標準C99 §6.3 Conversions
標準C++ §4 Standard conversions

戻る

BohYoh.comロゴ