- ベストアンサー
なぜオーバーフローになるのでしょうか。
VB6です。 こんな現象初めてでびっくりしました。 変数A、h、mはLong型です。 A = 9 * 3600 + 54 * 60 ->オーバーフロー発生 A = 35640 ->オーバーフローにならない h = 9 : m = 54 A = h * 3600 + m * 60 ->オーバーフローにならない 変数ではなく、実数で計算するとオーバーフローする意味がわかりません。また、計算結果を直接実数で代入した場合、なぜオーバーフローは 発生しないのかも意味不明です・・・ なぜ、オーバーフローが発生したりしなかったりするのでしょうか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
何の指定もなく実数(整数)で計算を行うとInteger型で 計算されるからです。 A = CLng(9) * CLng(3600) + CLng(54) * CLng(60) または A = CLng(9 * 3600) + CLng(54 * 60) として下さい。
その他の回答 (2)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 A = 9 * 3600 + 54 * 60 Integer型の範囲が越えてしまうからです。 A = 9 * 3600 + 54 * 60& と一つ、リテラル値を、Long型にすれば通ります。
お礼
ありがとうございました。 10年以上プログラミングはしているのに、独学とは恐ろしいものだと 実感しました。 実数の型なんて私の頭の辞書には載ってませんでした・・・ そういや、すべて実数で式をコーディングするのなんていままで無かったです・・・ 式の中に、longで宣言された変数があったので気がつかなかったってことなのでしょうね。 トホホ・・・・ です・・・
- don_go
- ベストアンサー率31% (336/1059)
捕捉 最初からInteger型の範囲を超えていた場合には、Long型と して計算を行いますが、それぞれの値がIntegerの範囲内で あればInteger型として計算されます。
お礼
ほへ!? あんぐりです・・・ 実数にも型が・・・初めて知りました。 ありがとうございました。