プロが教えるわが家の防犯対策術!

VB6です。 こんな現象初めてでびっくりしました。
変数A、h、mはLong型です。
A = 9 * 3600 + 54 * 60 ->オーバーフロー発生

A = 35640 ->オーバーフローにならない

h = 9 : m = 54
A = h * 3600 + m * 60 ->オーバーフローにならない

変数ではなく、実数で計算するとオーバーフローする意味がわかりません。また、計算結果を直接実数で代入した場合、なぜオーバーフローは
発生しないのかも意味不明です・・・

なぜ、オーバーフローが発生したりしなかったりするのでしょうか。

A 回答 (3件)

何の指定もなく実数(整数)で計算を行うとInteger型で


計算されるからです。

A = CLng(9) * CLng(3600) + CLng(54) * CLng(60)
または
A = CLng(9 * 3600) + CLng(54 * 60)
として下さい。
    • good
    • 1
この回答へのお礼

ほへ!? あんぐりです・・・
実数にも型が・・・初めて知りました。
ありがとうございました。

お礼日時:2007/03/11 13:11

こんにちは。



A = 9 * 3600 + 54 * 60

Integer型の範囲が越えてしまうからです。

A = 9 * 3600 + 54 * 60&

と一つ、リテラル値を、Long型にすれば通ります。
    • good
    • 2
この回答へのお礼

ありがとうございました。
10年以上プログラミングはしているのに、独学とは恐ろしいものだと
実感しました。

実数の型なんて私の頭の辞書には載ってませんでした・・・

そういや、すべて実数で式をコーディングするのなんていままで無かったです・・・ 式の中に、longで宣言された変数があったので気がつかなかったってことなのでしょうね。

トホホ・・・・ です・・・

お礼日時:2007/03/11 13:16

捕捉


最初からInteger型の範囲を超えていた場合には、Long型と
して計算を行いますが、それぞれの値がIntegerの範囲内で
あればInteger型として計算されます。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!