Numeric Types

C# has the following predefined numeric types:

C# type

System type

Suffix

Size

Range

Integral—signed

 

sbyte

SByte

 

8 bits

–27 to 27–1

short

Int16

 

16 bits

–215 to 215–1

int

Int32

 

32 bits

–231 to 231–1

long

Int64

L

64 bits

–263 to 263–1

Integral—unsigned

 

byte

Byte

 

8 bits

0 to 28–1

ushort

UInt16

 

16 bits

0 to 216–1

uint

UInt32

U

32 bits

0 to 232–1

ulong

UInt64

UL

64 bits

0 to 264–1

Real

 

float

Single

F

32 bits

± (~10–45 to 1038)

double

Double

D

64 bits

± (~10–324 to 10308)

decimal

Decimal

M

128 bits

± (~10–28 to 1028)

Of the integral types, int and long are first-class citizens and are favored by both C# and the runtime. The other integral types are typically used for interoperability or when space efficiency is paramount.

Of the real number types, float and double are called floating-point types and are typically used for scientific calculations. The decimal type is typically used for financial calculations, where base-10-accurate arithmetic and high precision are required. (Technically, decimal is a floating-point type too, although it’s not generally referred to as such.)

Numeric Literals

Integral literals can use decimal or hexadecimal notation; hexadecimal is denoted with the 0x prefix (e.g., 0x7f is equivalent to 127). Real literals may use decimal or exponential notation such as 1E06.

Numeric literal type inference

By default, the compiler infers a numeric literal to be either double or an integral type:

  • If the literal contains a decimal point or the exponential symbol (E), it is a double.

  • Otherwise, the literal’s type is ...

Get C# 5.0 Pocket Reference 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.