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]
The Java virtual machine's set of primitive data types consists of:[12]
byte
, short
, int
, long
, char
(integer types with a variety of ranges)float
and double
, floating-point numbers with single and double precisionsboolean
, a Boolean type with logical values true
and false
returnAddress
, a value referring to an executable memory address. This is not accessible from the Java programming language and is usually left out.[13][14]The set of basic C data types is similar to Java's. Minimally, there are four types, char
, int
, float
, and double
, but the qualifiers short
, long
, signed
, and unsigned
mean that C contains numerous target-dependent integer and floating-point primitive types.[15] C99 extended this set by adding the boolean type _Bool
and allowing the modifier long
to be used twice in combination with int
(e.g. long long int
).[16]
The XML Schema Definition language provides a set of 19 primitive data types:[17]
string
: a string, a sequence of Unicode code pointsboolean
: a booleandecimal
: a number represented with decimal notationfloat
and double
: floating-point numbersduration
, dateTime
, time
, date
, gYearMonth
, gYear
, gMonthDay
, gDay
, and gMonth
: Calendar dates and timeshexBinary
and base64Binary
: binary data encoded as hexadecimal or Base64anyURI
: a URIQName
: a qualified nameNOTATION
: a QName declared as a notation in the schema. Notations are used to embed non-XML data types.[18] This type cannot be used directly - only derived types that enumerate a limited set of QNames may be used.In JavaScript, there are 7 primitive data types: string, number, bigint, boolean, undefined, symbol, and null. These are not objects and have no methods.[19]
In Visual Basic .NET, the primitive data types consist of 4 integral types, 2 floating-point types, a 16-byte decimal type, a boolean type, a date/time type, a Unicode character type, and a Unicode string type.[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 )