- 締切済み
掛け算について
いつもお世話になります。 変数サイズと掛け算について教えてください。 下記の2通りの変数の場合、 (1)int test = 307600000 * 8; (2)int test = 2460800000; (1)は、整数定数がオーバーフローしましたというエラーになり、 (2)はエラーになりません。(2)の値は(1)の掛け算の結果です。 質問は、 1.なぜ(1)はダメなのか? 2.(1)をエラーをなくすにはどの変数型宣言をしなければならないのか? よろしくお願い致します。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- a-saitoh
- ベストアンサー率30% (524/1722)
回答No.1
そのようなソースを書けば、エラーなり警告が出るのは当然です。 32ビット符号付 int変数で扱えない数ですから。 (2)の値は(1)の掛け算の結果ではありません。32bitintの範囲ではオーバーフローして、-1666395136(たぶんこれで正しいはず)になります。 たまたま、(1)でエラーになって(2)でエラーにならないのはあなたがお使いのコンパイラの癖でしょう。 gccだと(1)(2)ともにエラーにはならずにwarningが出ます。
お礼
回答ありがとうございます。 そういうことだったんですね。 もう一度勉強します! ありがとうございました。