Tipo de datos primitivo

Un tipo de datos extremadamente básico/central proporcionado por un lenguaje de programación

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]

Tipos de datos primitivos comunes

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 

Números enteros

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 )NombresRango con signo (representación en complemento a dos )Rango sin signo
1 byte8 bitsByte , octeto , tamaño mínimo charen C99 (ver limits.h CHAR_BIT)−128 a +1270 a 255
2 bytes16 bits Palabra x86 , tamaño mínimo de shorty inten C−32.768 a +32.7670 a 65.535
4 bytes32 bitsPalabra doble x86, tamaño mínimo longen C, tamaño real intpara 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.6470 a 4.294.967.295
8 bytes64 bitsPalabra cuádruple x86, tamaño mínimo long longen C, tamaño real de longpara 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.8070 a 18.446.744.073.709.551.615

Números de punto flotante

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 ).

Booleanos

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, boolasí como las macros true, y falsese pueden incluir con stdbool.h ), [10] y C++ admite boolcomo un tipo incorporado y true y false como palabras reservadas. [11]

Idiomas específicos

Java

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)
  • floaty números de punto flotantedouble con precisión simple y doble
  • boolean, un tipo booleano con valores lógicos trueyfalse
  • 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]

Tipos básicos de C

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 unsignedsignifican que C contiene numerosos tipos primitivos de punto flotante y enteros dependientes del destino. [15] C99 amplió este conjunto añadiendo el tipo booleano _Booly permitiendo que el modificador longse use dos veces en combinación con int(por ejemplo, long long int). [16]

Esquema XML

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 Unicode
  • boolean: un booleano
  • decimal: un número representado con notación decimal
  • floaty double: números de punto flotante
  • duration, dateTime, time, date, gYearMonth, gYear, gMonthDay, gDay, y gMonth: Fechas y horas del calendario
  • hexBinaryy base64Binary: datos binarios codificados como hexadecimales o Base64
  • anyURI: una URI
  • QName:un nombre calificado
  • NOTATION: 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.

JavaScript

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]

Visual Basic .NET

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]

Óxido

Rust tiene enteros de ancho fijo con y sin signo primitivos en el formato uo irespectivamente seguidos de cualquier ancho de bit que sea una potencia de dos entre 8y 128dando los tipos u8, u16, u32, u64, u128, i8, i16, i32, i64y i128. [22] También están disponibles los tipos usizey isizeque son enteros con y sin signo que tienen el mismo ancho de bit que una referencia con el usizetipo que se usa para índices en matrices y tipos de colección indexables. [22]

Rust también tiene:

  • boolpara el tipo booleano . [22]
  • f32y para números de punto flotantef64 de 32 y 64 bits . [22]
  • charpara un carácter Unicode . En esencia, son números enteros de 32 bits sin signo con valores que corresponden al charpunto de código de pero solo son válidos los valores que corresponden a un valor escalar Unicode válido. [22]

Tipos incorporados

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:

Caracteres y cadenas

Un 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 chartipo, 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 charun tipo numérico. chartambié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]

Véase también

Referencias

  1. ^ Stone, RG; Cooke, DJ (5 de febrero de 1987). Construcción de programas. Cambridge University Press. pág. 18. ISBN 978-0-521-31883-9.
  2. ^ Wikander, Jan; Svensson, Bertil (31 de mayo de 1998). Sistemas en tiempo real en aplicaciones mecatrónicas. Springer Science & Business Media. pág. 101. ISBN 978-0-7923-8159-4.
  3. ^ ab Khurana, Rohit. Estructura de datos y archivos (para GTU), 2.ª edición. Editorial Vikas. pág. 2. ISBN 978-93-259-6005-3.
  4. ^ Chun, Wesley (2001). Programación básica en Python. Prentice Hall Professional. pág. 77. ISBN 978-0-13-026036-9.
  5. ^ Olsen, Geir; Allison, Damon; Speer, James (1 de enero de 2008). Manual de diseño de clases de Visual Basic .NET: codificación de clases efectivas. Apress. p. 80. ISBN 978-1-4302-0780-1.
  6. ^ ab Fog, Agner. "Optimización de software en C++" (PDF) . p. 29. Consultado el 28 de enero de 2022. Las operaciones con números enteros son rápidas en la mayoría de los casos, [...]
  7. ^ "Instrucción única, datos únicos: descripción general | Temas de ScienceDirect".
  8. ^ ab Fog, Agner (16 de febrero de 2010). "Convenciones de llamada para diferentes compiladores y sistemas operativos de C++: Capítulo 3, Representación de datos" (PDF) . Consultado el 30 de agosto de 2010 .
  9. ^ Kernighan, Brian W ; Ritchie, Dennis M (1978). El lenguaje de programación C (1.ª ed.). Englewood Cliffs, NJ : Prentice Hall . p. 41. ISBN 0-13-110163-3.
  10. ^ "Biblioteca de soporte de tipo booleano". devdocs.io . Consultado el 15 de octubre de 2020 .
  11. ^ "Tipo de datos bool en C++". GeeksforGeeks . 5 de junio de 2017 . Consultado el 15 de octubre de 2020 .
  12. ^ Lindholm, Tim; Yellin, Frank; Bracha, Gilad; Buckley, Alex (13 de febrero de 2015). "Capítulo 2. La estructura de la máquina virtual Java". La especificación de la máquina virtual Java®.
  13. ^ Cowell, John (18 de febrero de 1997). Essential Java Fast: Cómo escribir software orientado a objetos para Internet. Springer Science & Business Media. pág. 27. ISBN 978-3-540-76052-8.
  14. ^ Rakshit, Sandip; Panigrahi, Goutam (diciembre de 1995). Un manual de programación orientada a objetos con Java. S. Chand Publishing. pág. 11. ISBN 978-81-219-3001-7.
  15. ^ Kernighan, Brian W.; Ritchie, Dennis M. (1988). "2.2 Tipos y tamaños de datos". El lenguaje de programación C (segunda edición). Englewood Cliffs, NJ, pág. 36. ISBN 0131103709.{{cite book}}: Mantenimiento de CS1: falta la ubicación del editor ( enlace )
  16. ^ Especificación ISO/IEC 9899:1999, TC3 (PDF) . p. 255, § 6.2.5 Tipos .
  17. ^ Biron, Paul V.; Malhotra, Ashok. "XML Schema Part 2: Datatypes" (Esquema XML, parte 2: tipos de datos). www.w3.org (Segunda edición) . Consultado el 29 de enero de 2022 .
  18. ^ Phillips, Lee Anne (18 de enero de 2002). "Declaración de una NOTACIÓN | Comprensión de las definiciones de tipos de documentos XML". www.informit.com . Consultado el 29 de enero de 2022 .
  19. ^ "Primitive - Glosario de documentos web de MDN: definiciones de términos relacionados con la Web". MDN. 8 de junio de 2023.
  20. ^ "Tipos de datos y estructuras de datos de JavaScript". MDN. 9 de julio de 2024.
  21. ^ "Tipos en Visual Basic". Microsoft Docs . 18 de septiembre de 2021 . Consultado el 18 de mayo de 2022 .
  22. ^ abcde "Tipos de datos: el lenguaje de programación Rust". doc.rust-lang.org . Consultado el 17 de octubre de 2023 .
  23. ^ "Tipos integrados (C++)". learn.microsoft.com . 17 de agosto de 2021.
  24. ^ "Cadenas · El lenguaje Julia". docs.julialang.org . Consultado el 29 de enero de 2022 .
  25. ^ Mansoor, Umer (8 de mayo de 2016). "El tipo char en Java está roto". CodeAhoy . Consultado el 10 de febrero de 2020 .
  26. ^ "Instrucciones de E/S y cadenas" . Consultado el 29 de enero de 2022 .
  • Medios relacionados con Tipos primitivos en Wikimedia Commons
Obtenido de "https://es.wikipedia.org/w/index.php?title=Tipo_de_datos_primitivos&oldid=1251874646"