Этот код успешно компилируется, но вызывает System.OverflowException в Visual Studio 2013 во время выполнения:Почему побитовый оператор AND большого числа ULong с постоянными причинами 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
Можете ли вы объяснить мне, почему это происходит? И если переменная a имеет небольшое значение (например, 5), исключение не возникает.
P.S. Три наиболее значимых бита a переменная - все нули.
Максимальное значение ULong - '18446744073709551615', а побитовое И не вызывает превышения значения. Вы должны изменить 'И 1' как' И 1D', так как литерал '1' является целым типом. – mbomb007
Есть ли причина, по которой вы определяете 'Dim a As ULong' и используя символ типа десятичного литерала на RHS вместо' UL'? Info: [Type Characters (Visual Basic)] (https://msdn.microsoft.com/en-us/library/s9cz43ek.aspx) –
@AndrewMorton: Это * Любопытно, но не повлияет на проблему переполнения. –