允许在vb.net中添加溢出

时间:2014-03-16 20:10:05

标签: vb.net addition unsigned-integer overflowexception

我正在开发一个需要在一起添加多个整数的vb.net应用。整数是无符号的,长度为32位。

预计整数将会很大,以至于在添加时它们会溢出。如果发生任何溢出,我不想存储任何溢出,或者发生任何异常。

例如,如果我使用4位数字,我会想要以下行为:

1111 + 0010 = 0001

我已尝试以下操作来查看溢出时发生的情况 - 我收到溢出异常。这有什么优雅的方式吗?

Dim test As UInt32 = UInt32.MaxValue

Console.WriteLine(test.ToString())

test = test + 1

Console.WriteLine(test.ToString())

我目前正在使用UInt32来表示整数,但是如果有人知道更好的类型,这可以改变。

重要的是不存储溢出位,因为稍后我将要对这些数字执行位移等。

我可以看到在UInt64和UInt32之间进行转换的明显解决方案,但是我将来可能需要扩展应用程序以使用64位数字(因此,提供一个易于扩展的解决方案会很不错)

提前致谢,

戴夫

2 个答案:

答案 0 :(得分:4)

您可以使用“项目”中的“删除整数溢出检查”选项 - > “<项目名称>属性......” - > “编译”标签 - > “高级编译选项......”

Dim a As UInt32 = UInt32.MaxValue
a += 1
Console.WriteLine(a) ' outputs 0

答案 1 :(得分:1)

您必须使用64位整数(在您的VB版本中它们可能被称为Longs。)

Dim Value1 As Long = 12345
Dim Value2 As Long = 67890
Dim Result As Long = Value1 + Value2

' Remove the overflow from the result
Console.WriteLine(Result AND &HFFFF)

您可以使用有符号或无符号整数,但您必须将存储空间加倍才能使其正常工作(例如,16到32)。