1

此代码编译成功,但在执行期间会在 Visual Studio 2013 中导致 System.OverflowException:

Sub Main()
    Dim a As ULong = 14345389830683080345D
    Dim c As ULong = 1

    Dim x As ULong = a And 1 '<-- cause System.OverflowException
    Dim y As ULong = a And c '<-- works well
End Sub

你能解释一下为什么会这样吗?如果变量值很小(例如 5),则不会发生异常。

PS变量的三个最高有效位全为零。

4

1 回答 1

2

在 ULong 和 Integer 上使用按位 'And' 的结果是 'Long' - 这是您的第一种情况。溢出不是在赋值时发生,而是在“And”表达式本身的评估中发生 - 它不适合“Long”。ULong 和 ULong 的结果是 'ULong' - 这是你的第二种情况。

这些值的类型很重要。文字“1”默认为“整数”。

顺便说一句,找到这些结果的一种简单方法是设置 Option Infer On 并在 VB 中键入一些示例,例如“Dim v = 1 And 2”,然后通过将鼠标悬停在其上查看编译器键入的“v”。

于 2015-03-03T21:05:46.013 回答