在vb.net中允许添加溢出

在vb.net中允许添加溢出,vb.net,addition,unsigned-integer,overflowexception,Vb.net,Addition,Unsigned Integer,Overflowexception,我正在开发一个vb.net应用程序,它需要将多个整数相加。整数是无符号的,长度为32位 预计整数将非常大,以至于发生加法时会溢出。如果确实发生任何溢出,我不想存储任何溢出,或者出现任何异常 例如,如果我使用的是4位数字,我希望有以下行为: 1111 + 0010 = 0001 我尝试了以下方法来查看溢出发生了什么-我得到了一个溢出异常。有什么优雅的方法吗 Dim test As UInt32 = UInt32.MaxValue Console.WriteLine(test.ToString(

我正在开发一个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位数字(因此有一个易于扩展的解决方案会很好)

提前感谢,


Dave

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


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

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

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

您可以使用“项目”->“属性…”->“编译”选项卡->“高级编译选项…”中的“删除整数溢出检查”选项

您可以使用“项目”->“属性…”->“编译”选项卡->“高级编译选项…”中的“删除整数溢出检查”选项


那正是我想要的。非常感谢。这正是我想要的。非常感谢。我考虑过类似的事情,但如果我想在将来使用64位数字进行溢出,问题就会出现,我将不得不对这些数字进行循环移位等操作,所以这可能会引起头痛。。。不过谢谢你的建议。你也可以用&H7FFF标记单个值。这将防止可能的溢出。你不必关闭溢出检查。我考虑过类似的事情,但如果我想在将来使用64位数字进行溢出,问题就会出现,我将不得不对这些数字进行循环移位等操作,所以这可能会引起头痛。。。不过谢谢你的建议。你也可以用&H7FFF标记单个值。这将防止可能的溢出。您不必关闭溢出检查。
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)
Dim a As UInt32 = UInt32.MaxValue
a += 1
Console.WriteLine(a) ' outputs 0