人生のプチ美学を教えてください!!

Dim lngDaySec as Long
lngDaySec = 60 * 60 * 24

以上のコードでオーバーフローします。
しかし、2行目を以下のように書き換えると

lngDaySec = Clng(60 * 60) * 24

正常に値が代入されます。
Long型の値の範囲は「-2,147,483,648 ~ 2,147,483,647」
となっており、「60×60×24」は「86,400」だから
範囲を逸脱しているとは思えません。
どうしてオーバーフローするのでしょうか?
そして、Clng関数で回避できるのはなぜなんでしょう?
ひょっとしたらアホな質問をしているのかもしれませんが、
どなたかご回答いただければありがたいです。

A 回答 (1件)

lngDaySec = 60 * 60 * 24


式中の定数(60,60,24)が内部的に整数型(Integer)として扱われているせいです。

特に指定しない限り、VBのコンパイラは式の内容を見て定数の型を適当に設定します。
今回の場合、式中に含まれる全ての数値が32767以下であるため、これは整数型の演算であると判断されてしまったのでしょう。

こういった事態を回避するためには、定数の後ろに#を付けることにより、明示的に長整数型だと宣言してやればいいです。

こんな感じです。
lngDaySec = 60# * 60# * 24#
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。

>式中の定数(60,60,24)が内部的に整数型(Integer)
>として扱われているせいです
なるほどー。不便ですねー。
左辺を見て判断して欲しい……。

お礼日時:2001/04/22 16:32

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