如何在 Visual Basic .NET 中对有符号整数进行零扩展

How to zero-extend a signed integer in Visual Basic .NET

例如,我想将&H80000000赋值给一个64位有符号整数变量:

Dim a As Long = &H80000000

但是,整数 a 的值是 &HFFFFFFFF80000000 而不是 &H80000000
我试图调用 CULng 来绕过符号扩展。尽管如此,它还是说“常量表达式无法在 'ULong' 类型中表示”。我猜想这是因为 Visual Basic 禁止将负整数分配给无符号变量。

我正在使用 Visual Basic 2010 (.NET Framework 4.0)

Dim a As Long = &H80000000L

使用 literal suffix L 告诉编译器你希望这个值是一个长文字。否则,它被解释为表示负值 (-2147483648) 的带符号整数文字。或者,您可以使用后缀 UI 来表示无符号整数。

示例代码:

Dim a As Long = &H80000000      ' Int32 literal -2147483648
Dim b As Long = &H80000000L     ' Int64 literal  2147483648
Dim c As Long = &H80000000UI    ' UInt32 literal 2147483648

Console.WriteLine(a.ToString("X")) ' FFFFFFFF80000000
Console.WriteLine(b.ToString("X")) ' 80000000
Console.WriteLine(c.ToString("X")) ' 80000000