|
▼よっちゃん さん:
ichinoseさんの説明にあるように適当な型のメモリーに一度格納されます。
金2 = 10000 * 10 の場合
10000・・・Integer
10・・・Integer
自分でIntegerの変数を宣言して10000と10を入れて計算するのと変わりません。
どちらもIntegerなので計算結果もIntegerの型のメモリに入りその表現できる数値の範囲を超えているのでオーバーフローになります。
金2への代入はこの後になるので金2をVariantやLong型で宣言していてもオーバーフローは起こります。
つまり今回のオーバーフローは式の右側で起こっているのです。
次の場合
金2 = 10000 * 10&
10000・・・Integer
10&・・・Long (&を付けるとLong型の数値として扱われます)
IntegrよりLongの型の方が表現できる数値の範囲が大きいのでLongで計算され
オーバーフローになりません。
同様に
金2 = 1E+15 * 10
1E+15・・・Double
10・・・Integer
IntegrよりDoubleの型の方が表現できる数値の範囲が大きいのでDoubleで計算され
オーバーフローになりません。
次の式はオーバーフローになります。
金2 = (30000 + 30000) * 10&
30000・・・Integer
30000・・・Integer
10&・・・Long
()の中が先に計算されるのでIntegerで計算されその時点でオーバーフローです。
こんな説明で大丈夫でしょうか?(^^;
|
|