C# is a strongly types language,
which means each and every variable has a specific data type and there is no concept of a type less variable in C#.
Each data type tells us the size, range and the type of
value that can be stored in a variable.
In C#, there are about 13 built-in data types, which are also known as value types or primitive data types.
These value types are categorized into 4 parts. Let us take a look at these categories.
Primitive data types are categorized into 4 parts
integer data types, such as byte, sbyte, short, ushort, int, uint, long, ulong.
floating-point data types, such as float, double.
decimal data type, such as decimal.
character data type, such as char.
boolean data type, such as bool.
Maximum and minimum range of values for integer data types
The integer, floating-point and character data types can store a range of values, which is in between a minimum range
and a maximum range.
For many of us who like the reasoning behind equations, we will use a formula to calculate a minimum range
and a maximum range of values, that can be stored in the integer data types.
Minimum Range - It is the minimum value that can be stored in a data type.
Maximum Range - It is the maximum value that can be stored in a data type.
The minimum range for a signed data type(which can store both positive and negative integer values)
is calculated by -2^{(bits-1)}, while, the
minimum range for an unsigned data type(which can store only positive integer values) is 0(zero).
The maximum range for a signed data type(which can store both positive and negative integer values)
is 2^{(bits-1)}-1, where bits = size of a data type, while,
the maximum range for an unsigned data type(which can store both positive integer values)
is 2^{(bits)}-1, where bits = size of a data type.
For example - The integer data type byte is an unsigned data type.
The size of a byte data type is 8 bits.
And, as per formula above, the minimum range of value that can be stored in a variable declared as the byte data
type is 0, while the maximum range of value is 2^{8}-1 i.e. 255.
Hence, the range of values for the byte data type(which is unsigned) is 0 to 255.
Understanding the integer data types
Let's see a table of information about all the integer data, with each of their size, minimum and maximum range.
Integer Data Type
Size
Range
byte
1 byte = 8 bits
0 to 255
sbyte
1 byte = 8 bits
-128 to 127
short
2 bytes = 16 bits
-32768 to 32767
ushort
2 bytes = 16 bits
0 to 65535
int
4 bytes = 32 bits
–2,147,483,648 to 2,147,483,647
uint
4 bytes = 32 bits
0 to 4,294,967,295
long
8 bytes = 64 bits
–9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
ulong
8 bytes = 64 bits
0 to 18,446,744,073,709,551,615
byte
A variable of byte data type is of size 8 bits, which is equal to 1 byte.
The integer data type byte is an unsigned data type i.e. it can store only positive integer values. Therefore, as per the formulas discussed a while back,
a minimum value a byte variable can store is 0 and a
maximum value in a byte variable is 2^{8}-1 or 255.
Hence, it's range is 0 to 255.
sbyte
Size of a sbyte variable is 8 bits or 1 bytes.
The integer data type sbyte is a signed data type
i.e. it can store both positive and negative integer values.
The minimum value a byte variable can store is -2^{7} or -128 and a maximum value in a byte variable is 2^{7}-1 or +127.
Hence, it's range is -128 to 127
short
Size of a short variable is 16 bits or 2 bytes.
The integer data type short is a signed data type
i.e. it can store both positive and negative integer values.
A minimum value that can be stored in a short is -2^{15} or -32768 and a maximum is 2^{15}-1 or +32767.
So, it's range is -32768 to 0 to 32767.
ushort
A variable of ushort data type is of size 16 bits or 2 bytes.
The integer data type ushort is an unsigned data type i.e. it can store only positive integer values.
Therefore, as per the formulas discussed a while back,
a minimum value a byte variable can store is 0 and a
maximum value in a byte variable is 2^{16}-1 or 65535.
Hence, it's range is 0 to 65535.
int
Size of an int variable is 32 bits or 4 bytes.
The integer data type int is a signed data type
i.e. it can store both positive and negative integer values. The minimum value
that can be stored in an int is -2^{31} or -2, 147, 483, 648 while,
the maximum is 2^{31}-1 or 2, 147, 483, 647.
So, it's range is -2, 147, 483, 648 to +2, 147, 483, 647.
uint
A variable of uint data type is of size 32 bits or 4 bytes.
The integer data type uint is an unsigned data type i.e. it can store only positive integer values.
Therefore, as per the formulas discussed a while back,
a minimum value a byte variable can store is 0 and
the maximum is 2^{32}-1 or 4,294,967,295.
Hence, it's range is 0 to 4,294,967,295.
long
The size of a long variable is 64 bits or 8 bytes.
The integer data type int is a signed data type
i.e. it can store both positive and negative integer values.
The minimum range of a value that can be stored in a long is -2^{63} while,
the maximum is 2^{63}-1 Note: Because of a wider range than int, the long data type is used to store a larger number.
ulong
A variable of ulong data type is of size 64 bits or 8 bytes.
The integer data type ulong is an unsigned data type i.e. it can store only positive integer values.
Therefore, as per the formulas discussed a while back,
the minimum value a ulong variable can store is 0 and
the maximum is 2^{64}-1 or 4,294,967,295.
Advertisement
Understanding the floating-point data types
Let's see a table of information about the floating-point data types, with each of their size, minimum and maximum range.
Floating-Point Data Type
Size
Range
float
4 byte = 32 bits
1.5E–45 to 3.4E+38.
double
8 byte = 64 bits
5E–324 to 1.7E+308.
float
Using float data type, we can hold a number with its fractional part as well. So, we use this data type when a very precise calculation is required.
Size of a float variable is 32 bits= 4 bytes.
You don't usually need to remember the minimum
and maximum value of float data types but for those who still wish to know, its minimum range is 1.5E–45
and a maximum limit of 3.4E+38.
double
Size of a double variable is 64 bits= 8 bytes.
Double data type variable may store a data with a minimum value of 5E–324 until a maximum value of 1.7E+308
Note: In double data type, we can hold numbers with double precision values, as compared to float.
Understanding the decimal data type
Let's see a table of information about the decimal data type, with its size, minimum and maximum range.
Data Type
Size
Range
decimal
16 byte = 128 bits
1E–28 to 7.9E+28.
The decimal data type uses 128 bits to hold a decimal value and can represent up to 28 decimal places
So, we use this data type when a very precise floating-point arithmetic is being performed.
You don't usually need to remember the minimum
and maximum value of float data types but for those who still wish to know, its minimum range is 1E–28
and a maximum limit of 7.9E+28, a lot larger range than float or double.
Understanding the char data type
Let's see a table of information about the char data types, with its size, minimum and maximum range.
Data Type
Size
Range
char
2 byte = 16 bits
0 to 65535
C#'s char type variable takes 16 bits = 2 bytes in the memory.
Similar to Java, in C#, we have Unicode characters.
Unicode characters are represented by unsigned(only positive) 16-bit numbers. Hence, the minimum range is 0 and the maximum range is 2^{16}-1.
Ranging from 0 to 65535 values.
Why Unicode characters in Java?
Because Unicode characters are 16 bits, a wider range than characters in C or C++(where they were just 8 bits or 1 byte).
Hence, in C#, a rich international set of characters are easily represented in Unicode.
Understanding the bool data type
Data Type
Value
bool
true or false
For the bool data type in C, there is no range of values.
Unlike programming languages like C/C++, a boolean primitive data type in Java cannot take a 0 or 1 value.
A boolean in C# can be eithertrue or false.