0

我正在开发一个需要将多个整数相加的 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 位数字(所以如果有一个易于扩展的解决方案会很好)

提前致谢,

戴夫

4

2 回答 2

4

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

Dim a As UInt32 = UInt32.MaxValue
a += 1
Console.WriteLine(a) ' outputs 0
于 2014-03-16T20:34:09.830 回答
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)。

于 2014-03-16T20:28:47.623 回答