添加4个字节值会导致溢出异常

tmi*_*hty 1 vb.net visual-studio-2017

以下代码引发System.OverflowException

    Dim b1 As Byte = 13
    Dim b2 As Byte = 26
    Dim b3 As Byte = 125
    Dim b4 As Byte = 225

    Dim i As Integer = (b1 + b2 + b3 + b4) \ 2
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

Vis*_*ent 5

在将值Integer分配给变量之前,不会将其转换为。这意味着直到(包括)该\ 2零件,一切仍然都是type Byte

为了使这项工作有效,您必须至少将第一个变量转换为Integer,以便可以向其添加其他数字并超过255。

Dim i As Integer = (CType(b1, Integer) + b2 + b3 + b4) \ 2
Run Code Online (Sandbox Code Playgroud)

在线测试: https //dotnetfiddle.net/Lxmx2S


请注意,由于这尊重数学运算的顺序,因此必须转换所有类型过小的实例,这些实例要先于其他实例进行计算。例如,如果您将操作更改为此:

Dim i As Integer = (CType(b1, Integer) + b2 * b3 + b4) \ 2
Run Code Online (Sandbox Code Playgroud)

它也将引发错误,因为它b2 * b3在之前 计算的b1 + b2,因此您必须将其更改为:

Dim i As Integer = (CType(b1, Integer) + CType(b2, Integer) * b3 + b4) \ 2
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,有没有一种方法可以使我的代码看起来不像某些狂人键入的代码?:-) (2认同)