Entero (tipo de datos)

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 26 de marzo de 2022; las comprobaciones requieren 7 ediciones .

Integer , el tipo de datos entero ( inglés  integer ) es uno de los tipos de datos primitivos más simples . Sirve para representar números enteros , limitados por un valor mínimo y máximo, dependiendo de la memoria asignada para el número.

Variedades

Como regla general, para la mayoría de las tareas, se utiliza un tipo entero, también llamado int nativo (o simplemente int ), con un ancho de palabra igual al largo de palabra del procesador en el que se ejecuta el programa (o el modo de operación del procesador, si lo está). puede trabajar con palabras de máquina de diferentes longitudes) . Si es necesario, se pueden usar números enteros de menor profundidad (por ejemplo, si es necesario, para ahorrar memoria) y mayor (cuando se usa aritmética larga ). Otra posible razón para usar números enteros de longitud no nativa es garantizar la portabilidad de los datos . Las variedades más comunes del conjunto:

Además, si necesita ahorrar memoria, pero no hay necesidad de representar números negativos, se pueden usar números enteros sin signo, lo que le permite duplicar el valor máximo posible y por uno más: por ejemplo, un número de 0 a 65 535 puede representarse como un entero corto sin signo . A veces, en la literatura [1] hay recomendaciones de no usar números enteros sin signo, ya que es posible que el procesador de la computadora no los implemente . Además, falta soporte para tipos sin firmar en algunos lenguajes de programación, como Java [2] .

El uso de enteros sin signo está justificado en algoritmos que usan desbordamiento de enteros ; el hecho es que los compiladores de optimización pueden cambiar el orden de las operaciones y realizar transformaciones algebraicas, como resultado de lo cual el desbordamiento en el algoritmo optimizado puede ocurrir en un momento diferente que en el no optimizado, o no optimizado, lo que conduce a un comportamiento indefinido . Para los enteros sin signo, las optimizaciones que afectan el desbordamiento aritmético están deshabilitadas, por lo que el comportamiento de desbordamiento siempre está definido, pero el código nativo generado por el compilador se vuelve menos óptimo.

Presentación

En la memoria, un número entero se almacena como una secuencia de bits divididos en bytes (octetos). El orden de los bytes puede ser directo ( ing.  big-endian ), del bit más significativo al menos significativo, o inverso ( ing.  little-endian ).

La representación del signo también puede diferir para diferentes arquitecturas . El más común es el llamado código adicional , en el que un número negativo se representa restando a 0 con desbordamiento, mientras que si el bit alto del byte alto está encendido, el número se considera negativo. Menos utilizados son el código inverso (cuando un número negativo se representa como el inverso bit a bit de uno positivo), el código directo (cuando un número negativo se representa como un número positivo con el bit de signo activado) o los más exóticos. como el sistema numérico de base −2 [3] .

Las calculadoras y algunas de las primeras computadoras también usaban la representación BCD de números enteros . Tal código simplifica el dispositivo de visualización y hace que la representación de un número en la memoria sea más legible por humanos, pero complica el dispositivo aritmético-lógico y requiere más memoria para representar los mismos números.

Operaciones con números enteros

Operaciones aritméticas

Las operaciones aritméticas se aplican principalmente a valores enteros. A continuación se muestran los más utilizados (sus designaciones en varios lenguajes de programación y herramientas similares se indican entre paréntesis).

En algunos lenguajes de programación, por brevedad, existen operadores que te permiten realizar una operación aritmética con una asignación. Por ejemplo, " +=" suma el valor actual de la variable de la izquierda con la expresión de la derecha y coloca el resultado en la variable original. Además, en algunos idiomas y entornos, está disponible la operación combinada MulDiv , que multiplica por un número y luego divide el resultado por el segundo.

Por lo general, las operaciones más costosas en términos de velocidad son la multiplicación y la división (obtener el resto de la división).

En la memoria de la computadora, las celdas de un tamaño fijo generalmente se asignan para almacenar números enteros. Debido a esto, las operaciones de incremento y decremento pueden provocar un desbordamiento, lo que da como resultado un resultado distorsionado. Algunos lenguajes de programación le permiten lanzar una excepción en tales casos. Además, puede definir el comportamiento de desbordamiento:

Operaciones bit a bit

Además de las matemáticas, las operaciones con bits son aplicables a los números enteros , que se basan en las características de la codificación binaria posicional. Por lo general, se realizan mucho más rápido que las operaciones aritméticas y, por lo tanto, se utilizan como análogos más óptimos.

Trabajando con cadenas

Las operaciones bastante frecuentes obtienen una cadena de un valor numérico en la representación interna y viceversa, un número de una cadena. Al convertir a una cadena, las herramientas de formato suelen estar disponibles según el idioma del usuario.

A continuación se enumeran algunas de las representaciones de cadenas de números.

Tipo enumerado

Los enteros también incluyen un tipo enumerado. . Las variables de tipo enumerado toman un conjunto finito predefinido de valores. El tamaño de un conjunto no está determinado por la cantidad de bytes utilizados para representar los valores enteros de las variables de este tipo.

Por ejemplo, en Python , boolean es un subtipo de entero y usa los nombres False y True, que, cuando se convierten en un entero, obtienen los valores 0 y 1, respectivamente [4] .

Notas

  1. Ben-Ari, 2000 , pág. 54.
  2. Tipos, valores y variables , Especificación del lenguaje Java, 2.ª ed.
  3. Hacker's Delight, 2004 , p. 215-221.
  4. Beazley, 2009 , págs. 38.

Literatura