VB.NET Работа с частью уравнения, создающей исключение переполнения

В качестве простого примера следующий код создает исключение переполнения:

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 a большего типа данных, такого как Int32, но есть ли способ сказать, что вычислить выражение как Int32, а затем попытаться преобразовать его в Int16, прежде чем оно будет сохранено в z?

1 ответ

Вы можете преобразовать 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
Другие вопросы по тегам