En informática , los tipos de datos primitivos son un conjunto de tipos de datos básicos a partir de los cuales se construyen todos los demás tipos de datos. [1] Específicamente, a menudo se refiere al conjunto limitado de representaciones de datos en uso por un procesador particular , que todos los programas compilados deben usar. La mayoría de los procesadores admiten un conjunto similar de tipos de datos primitivos, aunque las representaciones específicas varían. [2] De manera más general, los tipos de datos primitivos pueden referirse a los tipos de datos estándar integrados en un lenguaje de programación ( tipos integrados ). [3] [4] Los tipos de datos que no son primitivos se denominan derivados o compuestos . [3]
Los tipos primitivos son casi siempre tipos de valor , pero los tipos compuestos también pueden ser tipos de valor. [5]
Los tipos primitivos más comunes son aquellos utilizados y soportados por el hardware de la computadora, como los números enteros de varios tamaños, los números de punto flotante y los valores lógicos booleanos . Las operaciones con estos tipos suelen ser bastante eficientes. Los tipos de datos primitivos que son nativos del procesador tienen una correspondencia uno a uno con los objetos en la memoria de la computadora, y las operaciones con estos tipos suelen ser las más rápidas posibles en la mayoría de los casos. [6] La suma de enteros, por ejemplo, se puede realizar como una sola instrucción de máquina, y algunas ofrecen instrucciones específicas para procesar secuencias de caracteres con una sola instrucción. [7] Pero la elección del tipo de datos primitivo puede afectar el rendimiento, por ejemplo, es más rápido usar operaciones SIMD y tipos de datos para operar en una matriz de flotantes. [6] : 113
Un tipo de datos entero representa un rango de números enteros matemáticos. Los números enteros pueden tener signo (permitiendo valores negativos) o no tener signo ( solo números enteros no negativos ). Los rangos comunes son:
Tamaño ( bytes ) | Tamaño ( bits ) | Nombres | Rango con signo (representación en complemento a dos ) | Rango sin signo |
---|---|---|---|---|
1 byte | 8 bits | Byte , octeto , tamaño mínimo char en C99 (ver limits.h CHAR_BIT) | −128 a +127 | 0 a 255 |
2 bytes | 16 bits | Palabra x86 , tamaño mínimo de short y int en C | −32.768 a +32.767 | 0 a 65.535 |
4 bytes | 32 bits | Palabra doble x86, tamaño mínimo long en C, tamaño real int para la mayoría de los compiladores de C modernos, puntero [8] para procesadores compatibles con IA-32 | −2.147.483.648 a +2.147.483.647 | 0 a 4.294.967.295 |
8 bytes | 64 bits | Palabra cuádruple x86, tamaño mínimo long long en C, tamaño real de long para la mayoría de los compiladores de C modernos, puntero [8] para procesadores compatibles con x86-64 | −9.223.372.036.854.775.808 a +9.223.372.036.854.775.807 | 0 a 18.446.744.073.709.551.615 |
Un número de punto flotante representa un número racional de precisión limitada que puede tener una parte fraccionaria. Estos números se almacenan internamente en un formato equivalente a la notación científica , normalmente en binario , pero a veces en decimal . Debido a que los números de punto flotante tienen una precisión limitada, solo un subconjunto de números reales o racionales se pueden representar de forma exacta; otros números solo se pueden representar de forma aproximada. Muchos lenguajes tienen un tipo de precisión simple (a menudo llamado float ) y un tipo de precisión doble (a menudo llamado double ).
Un tipo booleano , normalmente denominado bool o boolean , es un tipo lógico que puede tener el valor true o false . Aunque solo se necesita un bit para acomodar el conjunto de valores true y false , los lenguajes de programación normalmente implementan tipos booleanos como uno o más bytes.
Muchos lenguajes (por ejemplo, Java , Pascal y Ada ) implementan booleanos adhiriéndose al concepto de booleano como un tipo lógico distinto. Sin embargo, algunos lenguajes pueden convertir implícitamente booleanos a tipos numéricos a veces para dar semántica extendida a los booleanos y expresiones booleanas o para lograr compatibilidad con versiones anteriores del lenguaje. Por ejemplo, las primeras versiones del lenguaje de programación C que siguieron a ANSI C y sus estándares anteriores no tenían un tipo booleano dedicado. En su lugar, los valores numéricos de cero se interpretan como false y cualquier otro valor se interpreta como true . [9] El más nuevo C99 agregó un tipo booleano distinto _Bool
(el nombre más intuitivo, bool
así como las macros true
, y false
se pueden incluir con stdbool.h ), [10] y C++ admite bool
como un tipo incorporado y true y false como palabras reservadas. [11]
El conjunto de tipos de datos primitivos de la máquina virtual Java consta de: [12]
byte
, short
, int
, long
, char
( tipos enteros con una variedad de rangos)float
y números de punto flotantedouble
con precisión simple y dobleboolean
, un tipo booleano con valores lógicos true
yfalse
returnAddress
, un valor que hace referencia a una dirección de memoria ejecutable. No se puede acceder a este valor desde el lenguaje de programación Java y, por lo general, se omite. [13] [14]El conjunto de tipos de datos básicos de C es similar al de Java. Como mínimo, hay cuatro tipos, char
, int
, float
, y double
, pero los calificadores short
, long
, signed
, y unsigned
significan que C contiene numerosos tipos primitivos de punto flotante y enteros dependientes del destino. [15] C99 amplió este conjunto añadiendo el tipo booleano _Bool
y permitiendo que el modificador long
se use dos veces en combinación con int
(por ejemplo, long long int
). [16]
El lenguaje de definición de esquema XML proporciona un conjunto de 19 tipos de datos primitivos: [17]
string
: una cadena , una secuencia de puntos de código Unicodeboolean
: un booleanodecimal
: un número representado con notación decimalfloat
y double
: números de punto flotanteduration
, dateTime
, time
, date
, gYearMonth
, gYear
, gMonthDay
, gDay
, y gMonth
: Fechas y horas del calendariohexBinary
y base64Binary
: datos binarios codificados como hexadecimales o Base64anyURI
: una URIQName
:un nombre calificadoNOTATION
: un QName declarado como una notación en el esquema. Las notaciones se utilizan para incorporar tipos de datos que no sean XML. [18] Este tipo no se puede utilizar directamente; solo se pueden utilizar tipos derivados que enumeren un conjunto limitado de QNames.En JavaScript, hay 7 tipos de datos primitivos: cadena, número, bigint, booleano, símbolo, indefinido y nulo. [19] Sus valores se consideran inmutables . No son objetos y no tienen métodos ni propiedades ; sin embargo, todos los primitivos, excepto undefined y null, tienen contenedores de objetos. [20]
En Visual Basic .NET , los tipos de datos primitivos consisten en 4 tipos integrales, 2 tipos de punto flotante, un tipo decimal de 16 bytes, un tipo booleano, un tipo de fecha y hora, un tipo de carácter Unicode y un tipo de cadena Unicode. [21]
Rust tiene enteros de ancho fijo con y sin signo primitivos en el formato u
o i
respectivamente seguidos de cualquier ancho de bit que sea una potencia de dos entre 8
y 128
dando los tipos u8
, u16
, u32
, u64
, u128
, i8
, i16
, i32
, i64
y i128
. [22] También están disponibles los tipos usize
y isize
que son enteros con y sin signo que tienen el mismo ancho de bit que una referencia con el usize
tipo que se usa para índices en matrices y tipos de colección indexables. [22]
Rust también tiene:
bool
para el tipo booleano . [22]f32
y para números de punto flotantef64
de 32 y 64 bits . [22]char
para un carácter Unicode . En esencia, son números enteros de 32 bits sin signo con valores que corresponden al char
punto de código de pero solo son válidos los valores que corresponden a un valor escalar Unicode válido. [22]Los tipos integrados se distinguen de otros por tener soporte específico en el compilador o en tiempo de ejecución, hasta el punto de que no sería posible simplemente definirlos en un archivo de encabezado o en un módulo de biblioteca estándar. [23] Además de los números enteros, los números de punto flotante y los booleanos, otros tipos integrados incluyen:
nullptr_t
en C++11 y C23Integer
en Common Lisp , Erlang y HaskellUn tipo de carácter es un tipo que puede representar todos los caracteres Unicode , por lo tanto debe tener al menos 21 bits de ancho. Algunos lenguajes como Julia incluyen un tipo de carácter Unicode de 32 bits verdadero como primitivo. [24] Otros lenguajes como JavaScript , Python , Ruby y muchos dialectos de BASIC no tienen un tipo de carácter primitivo, sino que agregan cadenas como un tipo de datos primitivo, generalmente utilizando la codificación UTF-8 . Las cadenas con una longitud de uno normalmente se utilizan para representar caracteres individuales.
Algunos lenguajes tienen tipos de caracteres que son demasiado pequeños para representar todos los caracteres Unicode. Estos se clasifican más apropiadamente como tipos enteros a los que se les ha dado un nombre engañoso. Por ejemplo, C incluye un char
tipo, pero se define como la unidad de memoria direccionable más pequeña, que varios estándares (como POSIX ) requieren que sea de 8 bits . Las versiones recientes de estos estándares se refieren a char
un tipo numérico. char
también se usa para un tipo entero de 16 bits en Java , pero nuevamente este no es un tipo de carácter Unicode. [25]
El término cadena no siempre se refiere a una secuencia de caracteres Unicode, sino a una secuencia de bytes. Por ejemplo, x86-64 tiene instrucciones de cadena para mover, configurar, buscar o comparar una secuencia de elementos, donde un elemento puede tener una longitud de 1, 2, 4 u 8 bytes. [26]
Las operaciones con números enteros son rápidas en la mayoría de los casos, [...]
{{cite book}}
: Mantenimiento de CS1: falta la ubicación del editor ( enlace )