模仿C行为 - 添加无符号整数

时间:2010-11-07 14:36:17

标签: vb.net

在VB.NET中,以下代码会导致溢出。

    Dim t As UInt64
    t = UInt64.MaxValue
    t += 2UL

据我所知,在C中它“包裹”。假设这是真的,有没有办法在Visual Basic中模仿这个?我需要这个来实现我想写的UInt128。

2 个答案:

答案 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的方法。