举个简单的例子,下面的代码产生溢出异常:
Sub Main()
Dim x As Int16 = 2 ^ 10
Dim y As Int16 = 2 ^ 10
Dim z As Int16
z = CType(x * y / y, Int16)
Console.WriteLine(z)
Console.Read()
End Sub
当执行算术时,似乎由于方程是逐步计算的,因此方程的一部分将产生大于结果将进入的数据类型的结果。我知道我可以让z成为一个更大的数据类型,比如Int32,但是有没有办法说这个表达式作为Int32然后在它存储到z之前尝试将它转换为Int16?
答案 0 :(得分:0)
您可以将x和y(Int16)转换为x2和y2(Int32),并使用x2和y2进行计算。
Sub Main()
Dim x As Int16 = 2 ^ 10
Dim y As Int16 = 2 ^ 10
Dim z As Int16
Dim x2 As Int32 = x
Dim y2 As Int32 = y
z = CType(x2 * y2 / y2, Int16)
Console.WriteLine(z)
Console.Read()
End Sub