Tipos fundamentales
(Véase también tipos para un resumen del sistema de tipos y la lista de utilidades relacionadas con tipos que se suministran por la biblioteca de C++)
Contenido |
[editar] Tipo void
- void - Tipo con un conjunto de valores vacío. Es un tipo incompleto que no puede completarse (consecuentemente, objetos de tipo
voidno se permiten). No existen arrays devoid, ni referencias avoid. Sin embargo, se permiten punteros avoidy funciones que devuelven tipovoid(procedimientos en otros lenguajes).
[editar] std::nullptr_t
| Definido en el archivo de encabezado <cstddef>
|
||
| typedef decltype(nullptr) nullptr_t; |
(desde C++11) | |
std::nullptr_t es el tipo literal de puntero nulo, nullptr. Es un tipo distinto que no es en sí mismo un tipo puntero o un tipo puntero a miembro.
[editar] Tipo Booleano
- bool - Tipo capaz de manetener uno de dos valores: true o false. El valor de sizeof(bool) está definido por la implementación y puede diferir de 1.
[editar] Modelos de datos
Las elecciones hechas por cada implementación sobre los tamaños de los tipos fundamentales, colectivamente conocidos como modelos de datos. Cuatro modelos de datos fueron ampliamente aceptados:
Sistemas de 32 bits:
- LP32 or 2/4/4 (int es de 16 bits, long y puntero son de 32 bits)
- Win16 API
- ILP32 or 4/4/4 (int, long, y puntero son de 32 bits);
- Win32 API
- Unix y sistemas similares a Unix (Linux, Mac OS X)
Sistemas de 64 bits:
- LLP64 or 4/4/8 (int y long son de 32 bits, puntero es de 64 bits)
- Win64 API
- LP64 or 4/8/8 (int es de 32 bits, long y puntero son de 64 bits)
- Unix sistemas similares a Unix (Linux, Mac OS X)
Otros modelos son muy raros. Por ejemplo, ILP64 (8/8/8: int, long, y puntero son de 64 bits) solamente aparecieron en algunos modelos de sistemas iniciales de Unix de 64 bits (p. ej., Unicos en Cray).
[editar] Tipos enteros
- int - Tipo entero básico. La palabra clave
intpuede omitirse si se usa cualquiera de los modificadores listados abajo. Si no se encuentran presentes modificadores de longitud, se garantiza que tendrá al menos una anchura de 16 bits. Sin embargo, en sistemas de 32/64 bits, casi siempre se garantiza que tendrá una anchura de al menos 32 bits (véase abajo).
[editar] Modificadores
Modifica el tipo entero. Puede mezclarse en cualquier orden. Solamente uno de cada grupo puede estar presente en el nombre del tipo.
Signo
- signed - El tipo destino tendrá una representación con signo (por defecto si se omite).
- unsigned - El tipo destino tendrá una representación sin signo.
Tamaño
- short - El tipo destino se optimizará por espacio y tendrá una anchura de al menos 16 bits.
- long - El tipo destino tendrá una anchura de al menos 32 bits.
|
(desde C++11) |
Nota: al igual que todos los especificadores de tipo, se permite cualquier orden: unsigned long long int y long int unsigned long se refieren al mismo tipo.
[editar] Propiedades
La siguiente tabla resume todos los tipos enteros disponibles y sus propiedades en varios modelos de datos comunes:
| Especificador de tipo | Tipo equivalente | Anchura en bits por el modelo de datos | ||||
|---|---|---|---|---|---|---|
| C++ standard | LP32 | ILP32 | LLP64 | LP64 | ||
| short
|
short int | al menos 16 |
16 | 16 | 16 | 16 |
| short int
| ||||||
| signed short
| ||||||
| signed short int
| ||||||
| unsigned short
|
unsigned short int | |||||
| unsigned short int
| ||||||
| int
|
int | al menos 16 |
16 | 32 | 32 | 32 |
| signed
| ||||||
| signed int
| ||||||
| unsigned
|
unsigned int | |||||
| unsigned int
| ||||||
| long
|
long int | al menos 32 |
32 | 32 | 32 | 64 |
| long int
| ||||||
| signed long
| ||||||
| signed long int
| ||||||
| unsigned long
|
unsigned long int | |||||
| unsigned long int
| ||||||
| long long
|
long long int (C++11) |
al menos 64 |
64 | 64 | 64 | 64 |
| long long int
| ||||||
| signed long long
| ||||||
| signed long long int
| ||||||
| unsigned long long
|
unsigned long long int (C++11) | |||||
| unsigned long long int
| ||||||
Nota: la aritmética de enteros se define de manera diferente para los tipos enteros con signo o sin signo. Véase operadores aritméticos, en particular desbordamiento de enteros.
std::size_t es el tipo entero sin signo del resultado del operador sizeof así como del operador sizeof... y el operador alignof (desde C++11).
Véase también Tipos enteros de anchura fija. (desde C++11)
[editar] Tipos carácter
- signed char - El tipo para la representación de carácter con signo.
- unsigned char - El tipo para la representación de carácter sin signo. También se usa para inspeccionar las representaciones de objetos (memoria sin formato).
- char - El tipo para la representación de carácter que puede ser procesado más eficientemente en el sistema destino (tiene la misma representación y alineación que bien signed char o unsigned char, pero es siempre un tipo distinto). Las cadenas de caracteres multibyte utilizan este tipo para representar unidades de código. Los tipos carácter son lo suficientemente grandes para representar cualquier unidad de código UTF-8 de ocho bits (desde C++14). El signo de char depende del compilador y la plataforma destino: por defecto, en ARM y PowerPC es típicamente sin signo, mientras que por defecto, en x86 y x64 es típicamente con signo.
- wchar_t - El tipo para la representación de carácter amplio (véase cadenas amplias). Se requiere que sea lo suficientemente grande para representar cualquier punto de código de carácter soportado (32 bits en sistemas que soportan Unicode. Una excepción notable es Windows, donde wchar_t es de 16 bits y mantiene unidades de código UTF-16) Tiene el mismo tamaño, signo y alineación que uno de los tipos enteros, pero es un tipo distinto.
|
(desde C++11) |
|
(desde C++20) |
Además del número mínimo de bits, el C++ Estándar garantiza que
- 1 == sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long).
Nota: ésto permite el caso extremo en el que los bytes tienen un tamaño de 64 bits, todos los tipos (incluyendo char) son de 64 bits de ancho, y sizeof devuelve 1 para todos los tipos.
[editar] Tipos de punto (o coma) flotante
Aunque en países como España se utiliza la coma como el separador decimal, esta traducción conserva el uso de punto flotante en lugar de coma flotante.
- float - El tipo de punto flotante de simple precisión. Habitualmente el tipo IEEE-754 de 32 bits de punto flotante.
- double - El tipo de punto flotante de simple precisión. Habitualmente el tipo IEEE-754 de 64 bit de punto flotante.
- long double - El tipo de punto flotante de simple precisión. No corresponde necesariamente a los tipos requeridos por IEEE-754. Habitualmente un tipo de punto flotante de 80 bits x87 en arquitecturas x86 y x86-64.
[editar] Propiedades
Los tipos de punto flotante pueden soportar valores especiales:
- infinidad (positiva y negativa), véase INFINITY
- el cero negativo, -0.0. Se compara igual con el cero positivo, pero es significativo en algunas operaciones aritméticas, p. ej., 1.0/0.0 == INFINITY, pero 1.0/-0.0 == -INFINITY), y para algunas funciones matemáticas, p. ej.,sqrt(std::complex)
- no es un número (NaN), que no se compara igual con nada (incluyendo consigo mismo). Múltiples patrones de bits representan NaNs, véase std::nan, NAN. Observa que C++ no pone atención especial en señalar NaNs, excepto que se detecta su soporte mediante std::numeric_limits::has_signaling_NaN, y trata a todos los NaNs silenciosamente.
Los número reales de punto flotante pueden ser usados con los operadores aritméticos + - / * y varias funciones matemáticas de cmath. Tanto los operadores integrados como las funciones de biblioteca pueden generar excepciones de punto flotante y establecer a errno como se describe en math_errhandling
Las expresiones de punto flotante pueden tener mayor rango y precisión que lo que se indica por sus tipos. Véase FLT_EVAL_METHOD. Las expresiones de punto flotante también pueden ser contraídas, esto es, calculadas como si todos los valores intermedios tuvieran rango y precisión infinitos. Véase #pragma STDC FP_CONTRACT.
Algunas operaciones en números de punto flotante se afectan por el entorno de punto flotante y modifican el entorno de punto flotante (más notablemente, la dirección del redondeo).
Hay conversiones implícitas definidas entre tipos flotantes reales y tipos enteros.
Véase límites de los tipos de punto flotante y std::numeric_limits para detalles adicionales, límites y propiedades de los tipos de punto flotante.
[editar] Rango de valores
La siguiente tabla suministra una referencia para los límites de representaciones numéricas comunes.
Antes de C++20, el C++ Estándar permitía cualquier representación con signo, y el rango mínimo garantizado de enteros con signo de N bits era de -(2N-1
-1) a +2N-1
-1 (p. ej., -127 a 127 para un tipo de 8 bits con signo), que corresponde a los límites de complemento a uno o signo y magnitud.
Sin embargo, todos los compiladores de C++ utilizan una representación de complemento a dos, y a partir de C++20, es la única representación permitida por el estándar, con el rango garantizado de -2N-1
a +2N-1
-1 (p. ej., -128 a 127 para un tipo de 8 bits con signo).
| Tipo | Tamaño en bits | Formato | Rango de valores | |
|---|---|---|---|---|
| Aproximado | Exacto | |||
| carácter | 8 | signed | -128 to 127 | |
| unsigned | 0 to 255 | |||
| 16 | unsigned | 0 to 65535 | ||
| 32 | unsigned | 0 to 1114111 (0x10ffff) | ||
| entero | 16 | signed | ± 3.27 · 104 | -32768 to 32767 |
| unsigned | 0 to 6.55 · 104 | 0 to 65535 | ||
| 32 | signed | ± 2.14 · 109 | -2,147,483,648 to 2,147,483,647 | |
| unsigned | 0 to 4.29 · 109 | 0 to 4,294,967,295 | ||
| 64 | signed | ± 9.22 · 1018 | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 | |
| unsigned | 0 to 1.84 · 1019 | 0 to 18,446,744,073,709,551,615 | ||
| punto flotante |
32 | IEEE-754 |
|
|
| 64 | IEEE-754 |
|
| |
Nota: los límites actuales (en contraste con los mínimos garantizados) de los valores representables por estos tipos se encuentran disponibles en <climits>, <cfloat> y std::numeric_limits
[editar] Palabras clave
void, bool, true, false, char, wchar_t, char8_t, char16_t, char32_t, int, short, long, signed, unsigned, float, double
[editar] Véase también
- Resumen del sistema de tipos de C++
- Calificadores de volatibilidad y const (cv)
- Especificadores de clase de almacenamiento
| Documentación de C de Tipos aritméticos
|

Formed in 2009, the Archive Team (not to be confused with the archive.org Archive-It Team) is a rogue archivist collective dedicated to saving copies of rapidly dying or deleted websites for the sake of history and digital heritage. The group is 100% composed of volunteers and interested parties, and has expanded into a large amount of related projects for saving online and digital history.
