質問: prh ^ 2 * 22 / 10000
回答: nekomilkさんと内容は同じです。 まず、vbの演算処理ですが、通常の計算式と同じように左から計算して行きます。その時、データ型は演算対象になる変数や数値、演算結果で、通常最も精度の高いデータ型が使用されます。 #1の場合だと、prhも22も整数型ですから、内部処理形式も整数になり、prh*prh*22の演算を行った時点で演算結果が整数範囲を超えればオーバーフローします。 #2、#3の場合だと、除算"/"や、べき乗"^"演算を行うので、その時点で内部処理形式は通常倍精度浮動小数点型になります。なので以後は、普通の演算でオーバーフローすることはないでしょう。 内部処理形式とは、演算結果を一時的に保存している領域のデータ型のことです。 nekomilkさんもおっしゃってる通り、問題なのは代入時ではなくて、計算過程です。計算過程でオーバーフローしてるんです。#2,#3でオーバーフローが起こらないのは、演算過程で整数型ではなくなっているからです。 例えpraをlongと宣言していても、演算には関係ありません。最終的な演算結果が整数の範囲内なら、整数型のままでもokということですね。