System.Int32 no es el único tipo de dato básico incluido en C#. En el espacio de nombres System se han incluido todos estos:
| Tipo |
Descripción |
Bits |
Rango de valores |
Alias |
|
SByte |
Bytes con signo |
8 |
[-128, 127] |
sbyte |
|
Byte |
Bytes sin signo |
8 |
[0, 255] |
byte |
|
Int16 |
Enteros cortos con signo |
16 |
[-32.768, 32.767] |
short |
|
UInt16 |
Enteros cortos sin signo |
16 |
[0, 65.535] |
ushort |
|
Int32 |
Enteros normales |
32 |
[-2.147.483.648, 2.147.483.647] |
int |
|
UInt32 |
Enteros normales sin signo |
32 |
[0, 4.294.967.295] |
uint |
|
Int64 |
Enteros largos |
64 |
[-9.223.372.036.854.775.808,
9.223.372.036.854.775.807] |
long |
|
UInt64 |
Enteros largos sin signo |
64 |
[0-18.446.744.073.709.551.615] |
ulong |
|
Single |
Reales con 7 dígitos de precisión |
32 |
[1,5×10-45 - 3,4×1038] |
float |
|
Double |
Reales de 15-16 dígitos de precisión |
64 |
[5,0×10-324 - 1,7×10308] |
double |
|
Decimal |
Reales de 28-29 dígitos de precisión |
128 |
[1,0×10-28 - 7,9×1028] |
decimal |
|
Boolean |
Valores lógicos |
32 |
true, false |
bool |
|
Char |
Caracteres Unicode |
16 |
[‘\u0000’, ‘\uFFFF’] |
char |
|
String |
Cadenas de caracteres |
Variable |
El permitido por la memoria |
string |
|
Object |
Cualquier objeto |
Variable |
Cualquier objeto |
object |
Tabla 5 : Tipos de datos básicos
Pese a su sintaxis especial, en C# los tipos básicos son tipos del mismo nivel que cualquier otro tipo del lenguaje. Es decir, heredan de System.Object y pueden ser tratados como objetos de dicha clase por cualquier método que espere un System.Object, lo que es muy útil para el diseño de rutinas genéricas que admitan parámetros de cualquier tipo y es una ventaja importante de C# frente a lenguajes similares como Java donde los tipos básicos no son considerados objetos.
El valor que por defecto se da a los campos de tipos básicos consiste en poner a cero todo el área de memoria que ocupen. Esto se traduce en que los campos de tipos básicos numéricos se inicializan por defecto con el valor 0, los de tipo bool lo hacen con false, los de tipo char con ‘\u0000’, y los de tipo string y object con null.
Ahora que sabemos cuáles son los tipos básicos, es el momento de comentar cuáles son los sufijos que admiten los literales numéricos para indicar al compilador cuál es el tipo que se ha de considerar que tiene. Por ejemplo, si tenemos en una clase los métodos:
public static void F(int x) {...}
public static void F(long x) {...}
|
Ante una llamada como F(100), ¿a cuál de los métodos se llamara? Pues bien, en principio se considera que el tipo de un literal entero es el correspondiente al primero de estos tipos básicos que permitan almacenarlo: int, uint, long, ulong, por lo que en el caso anterior se llamaría al primer F() Para llamar al otro podría añadirse el sufijo L al literal y hacer la llamada con F(100L) En la Tabla 6 se resumen los posibles sufijos válidos:
|
Sufijo |
Tipo del literal entero |
|
ninguno |
Primero de: int, uint, long, ulong |
|
L ó l[9] |
Primero de: long, ulong |
|
U ó u |
Primero de: int, uint |
|
UL, Ul, uL, ul, LU, Lu, lU ó lu |
ulong |
Tabla 6: Sufijos de literales enteros
Por su parte, en la Tabla 7 se indican los sufijos que admiten los literales reales:
|
Sufijo |
Tipo del literal real |
|
F ó f |
float |
|
ninguno, D ó d |
double |
|
M ó m |
decimal |
Tabla 7: Sufijos de literales reales