如何在 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
例如,我想将&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