在VB.NET中,以下代码会导致溢出。
Dim t As UInt64
t = UInt64.MaxValue
t += 2UL
据我所知,在C中它“包裹”。假设这是真的,有没有办法在Visual Basic中模仿这个?我需要这个来实现我想写的UInt128。
答案 0 :(得分:4)
我不认识VB(所以你必须自己转换),但通常的做法是:
def add (value,addval):
if value <= maxvalue - addval:
return value + addval
subval = maxvalue - addval + 1
return value - subval
它基本上预先确定是否会出现溢出并将add(N)
操作转换为sub(maxvalue-N+1)
操作。
test和add / sub都在0..maxvalue
范围内是安全的。
答案 1 :(得分:1)
C#具有unchecked关键字,允许特定范围抑制溢出检查。在VB.NET中有一个project wide setting。 查看this thread。
项目设置适用于整个装配。如果在您的上下文中这是不可接受的,您必须为未经检查的功能创建单独的程序集或使用@ paxdiablo的方法。