オーバーフローを起こさずにint/Integer同士の積を求めたい場合、BigMulメソッドを用いることができます。 このメソッドは二つのint/Integerを引数にとり、それらの積をlong/Long型で返します。
Math.BigMulメソッドを使ってオーバーフローを起こさずに32ビット整数同士の積を求める
Imports System
Class Sample
Shared Sub Main()
Dim a As Integer = Integer.MaxValue
Dim b As Integer = 2
Console.WriteLine("{0} * {1} = {2}", a, b, Math.BigMul(a, b))
' 同じ値の積を*演算子で求めるとオーバーフローとなる
Console.WriteLine("{0} * {1} = {2}", a, b, a * b)
End Sub
End Class
オーバーフローのチェックを有効にしている場合
2147483647 * 2 = 4294967294 ハンドルされていない例外: System.OverflowException: 算術演算の結果オーバーフローが発生しました。 場所 Sample.Main()
オーバーフローのチェックを無効にしている場合
2147483647 * 2 = 4294967294 2147483647 * 2 = -2
オーバーフローのチェックの有効/無効の切り替えやその際の動作の違いなどについては整数型のオーバーフローとチェックを参照してください。