Los especificadores modifican el significado de los tipos
predefinidos básicos y los expanden a un conjunto más
grande. Hay cuatro especificadores: long
,
short
, signed
y unsigned
.
long
y short
modifican los valores máximos y
mínimos que un tipo de datos puede almacenar. Un
int
plano debe tener al menos el tamaño de un
short
. La jerarquía de tamaños para tipos enteros
es: short int
, int
, long
int
. Todos pueden ser del mismo tamaño, siempre y cuando
satisfagan los requisitos de mínimo/máximo. En una maquina
con una palabra de 64 bits, por defecto, todos los tipos de
datos podrían ser de 64 bits.
La jerarquía de tamaño para los números en coma flotante es:
float
, double
y long
double
. «long float» no es un tipo
válido. No hay números en coma flotantes de tamaño
short
.
Los especificadores signed
y unsigned
indican
al compilador cómo utilizar el bit del signo con los tipos
enteros y los caracteres (los números de coma flotante siempre
contienen un signo). Un número unsigned
no guarda el
valor del signo y por eso tiene un bit extra disponible, de modo
que puede guardar el doble de números positivos que pueden
guardarse en un número signed
. signed
se
supone por defecto y sólo es necesario con char
,
char
puede ser o no por defecto un
signed
. Especificando signed char
, se está
forzando el uso del bit del signo.
El siguiente ejemplo muestra el tamaño de los tipos de datos en
bytes utilizando el operador sizeof
, descripto más
adelante en ese capítulo:
//: C03:Specify.cpp // Demonstrates the use of specifiers #include <iostream> using namespace std; int main() { char c; unsigned char cu; int i; unsigned int iu; short int is; short iis; // Same as short int unsigned short int isu; unsigned short iisu; long int il; long iil; // Same as long int unsigned long int ilu; unsigned long iilu; float f; double d; long double ld; cout << "\n char= " << sizeof(c) << "\n unsigned char = " << sizeof(cu) << "\n int = " << sizeof(i) << "\n unsigned int = " << sizeof(iu) << "\n short = " << sizeof(is) << "\n unsigned short = " << sizeof(isu) << "\n long = " << sizeof(il) << "\n unsigned long = " << sizeof(ilu) << "\n float = " << sizeof(f) << "\n double = " << sizeof(d) << "\n long double = " << sizeof(ld) << endl; } ///:~
Listado 3.12. C03/Specify.cpp
Tenga en cuenta que es probable que los resultados que se consiguen ejecutando este programa sean diferentes de una maquina/sistema operativo/compilador a otro, ya que (como se mencionaba anteriormente) lo único que ha de ser consistente es que cada tipo diferente almacene los valores mínimos y máximos especificados en el Estándar.
Cuando se modifica un int
con short
o
long
, la palabra reservada int
es
opcional, como se muestra a continuación.