Los tipos de datos básicos son ciertos tipos de datos tan comúnmente
utilizados en la escritura de aplicaciones que en C# se ha incluido una
sintaxis especial para tratarlos. Por ejemplo, para representar números enteros
de 32 bits con signo se utiliza el tipo de dato System.Int32 definido
en la BCL, aunque a la hora de crear un objeto a de este tipo que represente el
valor 2 se usa la siguiente sintaxis:
System.Int32 a = 2;
Como se ve, no se utiliza el operador
new
para crear objeto System.Int32, sino que directamente se indica el
literal que representa el valor a crear, con lo que la sintaxis necesaria para
crear entero de este tipo se reduce considerablemente. Es más, dado lo
frecuente que es el uso de este tipo también se ha predefinido en C# el alias int para
el mismo, por lo que la definición de variable anterior queda así de compacta:
int a =
2;
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
|
|
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 1: 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 2 se resumen los posibles sufijos válidos:
Sufijo
|
Tipo del literal entero
|
|
ninguno
|
Primero de: int, uint,
long, ulong
|
|
L ó l
|
Primero de: long, ulong
|
|
U ó u
|
Primero de: int, uint
|
|
UL, Ul, uL, ul, LU, Lu,
lU ó lu
|
ulong
|
Tabla 2: Sufijos de literales enteros
Por su parte, en la Tabla 3 se indican los sufijos que admiten los literales
reales son:
Sufijo
|
Tipo del literal real
|
|
F ó f
|
float
|
|
ninguno, D ó d
|
double
|
|
M ó m
|
decimal
|
Tabla 3:
Sufijos de literales reales