計算式の結果がオーバーフローするのはなんで?

解決


UNI  2004-05-26 13:48:46  No: 83570  IP: [192.*.*.*]

初心者なんで、もしかしたら素っ頓狂な質問なのかもしれませんが、
わかりませんので、だれか教えて下さい。

質問は、変数二つをInteger型で宣言しました。整数型だとヘルプで
32767まで格納できるということだったのですが、二つの変数に30000という
データを格納し、その二つを足し算して、ラベルに表示しようとすると
オーバーフローを起こしちゃいます。

二つの変数に制限されたメモリ領域が割り当てられるまでは理解できるのですが、
なぜこの二つを演算するだけでオーバーフロー起こすのでしょうか?
演算するための領域も、変数の一番大きいデータ型で用意して、演算処理
されるようになってるのでしょうか?

どなたかご教授お願いします。

編集 削除
nanashi  2004-05-26 14:26:19  No: 83571  IP: [192.*.*.*]

私は感覚でしか理解していませんが……。

オーバーフローのエラーが出たときにヘルプを見ると分かりますが、

「数値計算で数値が内部的に整数型として処理されている場合に、
  計算結果が整数型の範囲を超えています。」

というのがあります。
また演算子のヘルプを見ると

「数値データ型の式だけから構成される単純な加算では、
  演算結果 result のデータ型は、通常最も精度の高い式のデータ型と同じになります。」

つまり結果を入れる変数がLong型でも、式の中がInteger型だけなら演算結果はInteger型になり、
その際Integerの範囲を越えているからオーバーフローするんです。

Integer型の変数のどちらかをCLngすれば起こらなくなります。

編集 削除
UNI  2004-05-26 14:35:09  No: 83572  IP: [192.*.*.*]

ありがとうございます。

「数値データ型の式だけから構成される単純な加算では、
  演算結果 result のデータ型は、通常最も精度の高い式のデータ型と同じになります。」

しりませんでした。ほんとうに助かりました。ありがとうございました。

編集 削除