Udostępnij za pośrednictwem


Unsigned Types

As you
may have seen on the roadmap (https://msdn.microsoft.com/vstudio/productinfo/roadmap.aspx),
we've been working on several new language features for VB .NET. One of them includes unsigned types. Yes, VB is finally getting unsigned types,
and this will make some tasks a lot easier.

Specifically,
we are adding intrinsic support for four new integral types, three of them
unsigned, one of them signed. Here's a
table which describes the new types:

VB Keyword

Conversion Operator

Type Character

CLR Name

SByte

CSByte(o)

--none--

System.SByte

UShort

CUShort(o)

US

System.UInt16

UInteger

CUInt(o)

UI

System.UInt32

ULong

CULng(o)

UL

System.UInt64

For
consistency with earlier versions of VB, the name of the original type makes up
the root of the new name, prefixed by a U (or S) to denote the signededness of the type. We used a similar approach to name the conversion operators and type
characters. SByte has no type character
because Byte has no type character.

Here's a
code snippet which uses each of these new types:

Module
Module1

    Sub Main()

       
Dim a As
SByte = -127

       
Dim b As UShort
= 65535

       
Dim c As UInteger
= 4294967295

       
Dim d As ULong
= 18446744073709551615UL

       
Dim o As Object

       
o = CSByte(42)

       
a = CSByte(o)

       
o = 42US

       
b = CUShort(o)

       
o = 42UI

       
c = CUInt(o)

       
o = 42UL

       
c = CULng(o)

    End Sub

End
Module

Of
course, this snippet is a contrived example demonstrating the new syntax. Here's a real-world example:

Module
ExternalFunctions

    Structure INFO

       
Public KIND As UShort

       
Public FLAGS As UShort

       
Public DATA As UInteger

    End Structure

    Declare Auto Sub GetData Lib "mylib" (ByRef Info As INFO)

    Declare Auto Function GetCount Lib "mylib" _

        (ByVal Index As UInteger) As UInteger

    Sub Enumerate()

       
For i As UInteger
= 0 To GetCount(10)

           
Dim Info As INFO

           
GetData(Info)

           
Console.WriteLine(Info.KIND)

           
Console.WriteLine(Info.DATA)

       
Next

    End Sub

End
Module

One final
note: unsigned types also affect method
overload resolution. If two methods are
equally applicable because the argument types do not exactly match the
signature, yet the methods differ only by the signededness
of a parameter, the method with the signed parameter wins (except for SByte and Byte, where Byte wins). This rule
reduces the occurrence of ambiguity errors.

Comments

  • Anonymous
    August 25, 2003
    What work is being done with unsigned values and bit operations (and, or, <<, >>)? Today, we have the issue of the signed bit causing problems when using the signed values and trying to do bit manipulation on values over a certain ceiling. Unsigned values should solve this issue (as it does in languages that already have unsigned values). I just want to hear from someone that all will be as expected on this front.
  • Anonymous
    August 26, 2003
    Correct, unsigned types will solve this problem. And, Or, <<, and >> will behave with unsigned types as they do in other languages.
  • Anonymous
    October 14, 2003
    The comment has been removed
  • Anonymous
    July 20, 2004
    When will this be incorporated into the Studio.Net?
  • Anonymous
    July 20, 2004
    see here:
    http://www.panopticoncentral.net/archive/2004/06/29/1327.aspx

    - Cameron
  • Anonymous
    May 31, 2009
    PingBack from http://outdoorceilingfansite.info/story.php?id=1303
  • Anonymous
    May 31, 2009
    PingBack from http://outdoorceilingfansite.info/story.php?id=18939