我正在开发一个需要在一起添加多个整数的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位数字(因此,提供一个易于扩展的解决方案会很不错)
提前致谢,
戴夫
答案 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)。