Predefined Types

This section explains each of C#’s predefined types:

  • Value types

    —Integer, signed (sbyte, short, int, long)
    —Integer, unsigned (byte, ushort, uint, ulong)
    —Floating-point (float, decimal, double)
  • Reference types

    —Object
    —String

All of these types alias types found in the System namespace. For example, there is only a syntactic difference between these two statements:

int i = 5;
System.Int32 i = 5;

Integral Types

C# type

System type

Size

Signed

sbyte

System.SByte

1 byte

yes

short

System.Int16

2 bytes

yes

int

System.Int32

4 bytes

yes

long

System.Int64

8 bytes

yes

byte

System.Byte

1 byte

no

ushort

System.UInt16

2 bytes

no

uint

System.UInt32

4 bytes

no

ulong

System.UInt64

8 bytes

no

For unsigned integers that are n bits wide, possible values range from 0 to 2n-1. For signed integers that are n bits wide, their possible values range from -2n-1 to 2n-1-1. Integer literals can use either decimal or hexadecimal notation:

int x = 5;
ulong y = 0x1234AF; // prefix with 0x for hexadecimal

When an integral literal is valid for several possible integral types, the default type chosen goes in this order: int, uint, long, and ulong. The following suffixes may be used to explicitly specify the chosen type:

U

uint or ulong

L

long or ulong

U

ulong

Integral conversions

An implicit conversion between integral types is permitted when the type to convert to contains every possible value of the type to convert from. Otherwise an explicit ...

Get C# in a Nutshell, Second Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.