En informática , los tipos de datos primitivos son un conjunto de tipos de datos básicos a partir del cual se construyen todos los demás tipos de datos. [1] Específicamente, a menudo se refiere al conjunto limitado de representaciones de datos que utiliza un procesador en 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 casi siempre son tipos de valor , pero los tipos compuestos también pueden ser tipos de valor. [5]
Los tipos primitivos más comunes son los utilizados y soportados por el hardware de la computadora, como números enteros de varios tamaños, números de punto flotante y 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 en 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 algún rango de números enteros matemáticos. Los números enteros pueden tener signo (permitiendo valores negativos) o sin signo ( sólo números enteros no negativos ). Los rangos comunes son:
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, sólo un subconjunto de números reales o racionales es exactamente representable; otros números sólo se pueden representar de forma aproximada. Muchos lenguajes tienen un tipo de precisión simple (a menudo llamado "flotante") y un tipo de precisión doble (a menudo llamado "doble").
Un tipo booleano , normalmente denominado "bool" o "booleano", suele ser un tipo lógico que puede tener el valor "verdadero" o "falso". Aunque sólo se necesita un bit para dar cabida al conjunto de valores "verdadero" y "falso", los lenguajes de programación normalmente implementan tipos booleanos como uno o más bytes.
Muchos lenguajes (por ejemplo, Java , Pascal y Ada ) implementan valores booleanos que se adhieren al concepto de booleano como un tipo lógico distinto. Sin embargo, algunos lenguajes pueden convertir implícitamente booleanos en tipos numéricos en ocasiones para dar una semántica extendida a 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 seguían ANSI C y sus estándares anteriores no tenían un tipo booleano dedicado. En cambio, los valores numéricos de cero se interpretan como "falso" y cualquier otro valor se interpreta como "verdadero". [9] El C99 más nuevo agregó un tipo booleano distinto _Bool
(el nombre más intuitivo bool
, así como las macros true
, y false
se puede incluir con stdbool.h ), [10] y C++ admite bool
como tipo integrado y "verdadero" y "falso". " 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 de números enteros con una variedad de rangos)float
y números de punto flotante con precisionesdouble
simples y doblesboolean
, 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 esto 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 objetivo. [15] C99 amplió este conjunto agregando el tipo booleano _Bool
y permitiendo que el modificador long
se use dos veces en combinación con int
(por ejemplo long long int
). [dieciséis]
El lenguaje de definición de esquemas 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 hexadecimal o Base64anyURI
: un URIQName
: un nombre calificadoNOTATION
: un QName declarado como notación en el esquema. Las notaciones se utilizan para incrustar tipos de datos que no son XML. [18] Este tipo no se puede usar directamente; solo se pueden usar tipos derivados que enumeren un conjunto limitado de QNames.En JavaScript, hay 7 tipos de datos primitivos: cadena, número, bigint, booleano, indefinido, símbolo y nulo. Estos no son objetos y no tienen métodos. [19]
En Visual Basic .NET , los tipos de datos primitivos constan de 4 tipos integrales, 2 tipos de punto flotante, un tipo decimal de 16 bytes, un tipo booleano, un tipo de fecha/hora, un tipo de carácter Unicode y un tipo de cadena Unicode. [20]
Rust tiene enteros primitivos de ancho fijo sin signo y con signo en el formato u
o i
seguidos respectivamente de cualquier ancho de bits que sea una potencia de dos entre 8
y 128
dando los tipos u8
, u16
, u32
, u64
, u128
, i8
, i16
, i32
y i64
. [21] También están disponibles los tipos y que son enteros sin signo y con signo que tienen el mismo ancho de bits como referencia y el tipo se utiliza para índices en matrices y tipos de colecciones indexables. [21]i128
usize
isize
usize
Rust también tiene:
bool
para el tipo booleano . [21]f32
y para números de coma flotantef64
de 32 y 64 bits . [21]char
para un carácter Unicode . En el fondo, estos son 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. [21]Los tipos integrados se distinguen de otros por tener soporte específico en el compilador o tiempo de ejecución, hasta el punto de que no sería posible definirlos simplemente en un archivo de encabezado o módulo de biblioteca estándar. [22] Además de los números enteros, números de punto flotante y booleanos, otros tipos integrados incluyen:
nullptr_t
en C++ y C23Integer
en Common Lisp , Erlang , HaskellUn tipo de carácter es un tipo que puede representar todos los caracteres Unicode , por lo que debe tener al menos 21 bits de ancho. Algunos idiomas, como Julia, incluyen un tipo de carácter Unicode verdadero de 32 bits como primitivo. [23] 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 usando la codificación UTF-8 . Normalmente se utilizan cadenas con una longitud de uno para representar caracteres individuales.
Algunos idiomas tienen tipos de "caracteres" que son demasiado pequeños para representar todos los caracteres Unicode. Estos se clasifican más adecuadamente como tipos de números 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 denominan char
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. [24]
El término "cadena" tampoco siempre se refiere a una secuencia de caracteres Unicode, sino que se refiere 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 podría tener 1, 2, 4 u 8 bytes de longitud. [25]
Las operaciones con números enteros son rápidas en la mayoría de los casos, [...]
{{cite book}}
: Mantenimiento CS1: falta el editor de la ubicación ( enlace )