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

Time:10-12

For example, I would like to assign &H80000000 to a 64-bit signed integer variable:

Dim a As Long = &H80000000

However, integer a has value &HFFFFFFFF80000000 instead of &H80000000.
I tried to call CULng to circumvent the sign-extension. Nonetheless, it says "Constant expression not representable in type 'ULong'". I conjecture this is because Visual Basic prohibits a negative integer to be assigned to an unsigned variable.

I am using Visual Basic 2010 (.NET Framework 4.0)

CodePudding user response:

Dim a As Long = &H80000000L

Use the literal suffix L to tell the compiler that you intend this value to be a long literal. Otherwise, it's interpreted as a signed integer literal representing a negative value (-2147483648). Alternatively, you can use the suffix UI to denote an unsigned integer.

Example code:

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
  • Related