[リストへもどる]
一括表示

投稿時間:2003/11/12(Wed) 15:05
投稿者名:TM
Eメール:
URL :
タイトル:
オーバーフロー
VB6.0、WinXPです。

Dim a As Long
a = 3277 * 10
とやると「オーバーフローしました」とエラーになってしまいますが、
a = 32770 * 10

a = 3277& * 10
だと大丈夫です。

Int同士の掛け算だからIntを超えたらオーバーフローと、
VBが勝手に判断してしまうからなのでしょうか?
今迄&や!など一度もつけたことないし、サンプルプログラムなんかを見てても
&や!をつけているプログラムは見たことありません。
時間->秒に変換などで、t * 60 * 60 なんてよくやると思いますが、
やはり&や!をつけるのが一般的なのでしょうか?

投稿時間:2003/11/12(Wed) 16:47
投稿者名:よねKEN
Eメール:
URL :
タイトル:
Re: オーバーフロー
> Int同士の掛け算だからIntを超えたらオーバーフローと、
> VBが勝手に判断してしまうからなのでしょうか?

その通りです。特に型指定しなければ、Integerに収まる数値同士の演算では、
各数値はIntegerとみなされ、最終的にLongの変数に計算結果を入れる場合でも、
計算途中でIntegerの範囲を超えるとオーバーフローになります。

> 今迄&や!など一度もつけたことないし、サンプルプログラムなんかを見てても
> &や!をつけているプログラムは見たことありません。

Long型であることを明記するために数値の後ろに&を付けるのは
今回の例のように必要な場面では普通に使用します。

投稿時間:2003/11/14(Fri) 22:15
投稿者名:TM
Eメール:
URL :
タイトル:
Re^2: オーバーフロー
> Long型であることを明記するために数値の後ろに&を付けるのは
> 今回の例のように必要な場面では普通に使用します。
>
ありがとうございます。
今までおちなかったのは運がよかったのですね。
定数ばかりの計算式は、あまりないと思いますので、
Dim a As Integer
Dim b As Long
b = a * 60 * 60
のような場合に気を付けることにします。