Entero (informática)

Ajustar Compartir Imprimir Citar
Datum del tipo de datos integral

En informática, un entero es un dato de tipo de datos integral, un tipo de datos que representa algún rango de números enteros matemáticos. Los tipos de datos integrales pueden ser de diferentes tamaños y pueden o no permitirse que contengan valores negativos. Los números enteros se representan comúnmente en una computadora como un grupo de dígitos binarios (bits). El tamaño de la agrupación varía, por lo que el conjunto de tamaños de enteros disponibles varía entre los diferentes tipos de computadoras. El hardware de la computadora casi siempre proporciona una forma de representar un registro de procesador o una dirección de memoria como un número entero.

Valor y representación

El valor de un elemento de tipo integral es el entero matemático al que corresponde. Los tipos integrales pueden ser sin signo (capaces de representar solo enteros no negativos) o firmados (capaces de representar enteros negativos también).

Un valor entero generalmente se especifica en el código fuente de un programa como una secuencia de dígitos con el prefijo opcional + o −. Algunos lenguajes de programación permiten otras notaciones, como hexadecimal (base 16) u octal (base 8). Algunos lenguajes de programación también permiten separadores de grupos de dígitos.

La representación interna de este dato es la forma en que se almacena el valor en la memoria de la computadora. A diferencia de los números enteros matemáticos, un dato típico en una computadora tiene un valor mínimo y máximo posible.

La representación más común de un entero positivo es una cadena de bits, utilizando el sistema numérico binario. El orden de los bytes de memoria que almacenan los bits varía; ver endianidad. El ancho o precisión de un tipo integral es el número de bits en su representación. Un tipo integral con n bits puede codificar 2n números; por ejemplo, un tipo sin signo normalmente representa los valores no negativos del 0 al 2n−1. A veces se utilizan otras codificaciones de valores enteros en patrones de bits, por ejemplo, código Gray o decimal codificado en binario, o como códigos de caracteres impresos, como ASCII.

Hay cuatro formas conocidas de representar números con signo en un sistema informático binario. El más común es el complemento a dos, que permite un tipo integral con signo con n bits para representar números desde −2(n−1) a 2(n−1)−1. La aritmética en complemento a dos es conveniente porque existe una correspondencia biunívoca perfecta entre las representaciones y los valores (en particular, no se separan +0 y −0), y porque la suma, la resta y la multiplicación no necesitan distinguir entre tipos firmados y no firmados. Otras posibilidades incluyen compensación binaria, signo-magnitud y unidades. complementar.

Algunos lenguajes informáticos definen tamaños enteros de forma independiente de la máquina; otros tienen definiciones variables según el tamaño de palabra del procesador subyacente. No todas las implementaciones de lenguaje definen variables de todos los tamaños enteros, y es posible que los tamaños definidos ni siquiera sean distintos en una implementación particular. Un número entero en un lenguaje de programación puede tener un tamaño diferente en un lenguaje diferente o en un procesador diferente.

Tipos de datos integrales comunes

Bits Nombre Rango (asumiendo el complemento de dos para firmado) dígitos decimales Usos Aplicación
C/C++ C# Pascal y Delphi Java SQL FORTRAN D Rust
4 nibble, semioctet Firmada: De −8 a 7, de −23) a 23− 1 0.9 Decimal codificado binario, representación de dígitos decimales
Insigned: De 0 a 15, que equivale a 24− 1 1.2
8 byte, octet, i8, u8 Firmada: De −128 a 127, de −27) a 27− 1 2.11 ASCII caracteres, unidades de código en la codificación de caracteres UTF-8 int8_t, firmado porsbyteShortintbytediminutoentero (1)bytei8
Insigned: De 0 a 255, que equivale a 28− 1 2.41 uint8_t, unsigned charbyteBytediminuto no firmadoubyteu8
16 media palabra, palabra, corto, i16, u16 Firmada: From −32,768 to 32,767, from −(215) a 215− 1 4.52 caracteres UCS-2, unidades de código en la codificación de caracteres UTF-16 int16_t, corto, intcortoPequeñocortopequeñainteger(2)cortoi16
Insigned: De 0 a 65,535, que equivale a 216− 1 4.82 uint16_t, unsigned, intushortPalabracharunsigned smallintushortu16
32 palabra, larga, palabra doble, palabra larga, int, i32, u32 Firmada: De −2147,483,648 a 2147,483,647, de −231) a 231− 1 9.33 caracteres UTF-32, verdadero color con alpha, FourCC, punteros en computación de 32 bits int32_t, int, largointLongInt; Integerintintinteger(4)inti32
Insigned: De 0 a 4.294.967.295, que equivale a 232− 1 9.63 Uint32_t, unsigned, int, no firmado largoUintLongWord; DWord; CardenalintUintu32
64 palabra, palabra doble, palabra larga, larga, quad, quadword, qword, int64, i64, u64 Firmada: From −9,223,372,036,854,775,808 to 9,223,372,036,854,775,807, from −(263) a 263− 1 18.96 Tiempo (milliseconds desde la época Unix), punteros en computación de 64 bits int64_t, largo, largolargoInt64largobigintinteger(8)largoi64
Insigned: De 0 a 18,446,744,073,709,551,615, que equivale a 264− 1 19.27 uint64_t, sin firmar mucho tiempoulongUInt64; QWordunsigned bigintulongu64
128 octaword, doble cuaderno, i128, u128 Firmada: From −170,141,183,460,469,231,731,687,303,715,884,105,728 to 170,141,183,460,469,231,731,687,303,715,884,105,727, from −(2127) a 2127− 1 38.23 Cálculos científicos complejos,

Dirección IPv6, GUIDs

C: sólo disponible como extensión no estándar del compilador integer(16)Porcentajei128
Insigned: De 0 a 340.282.336.920,938,463,374,607,431,768,211,455, que equivale a 2128− 1 38.53 ucentu128
nn-bit integer
(caso general)
Firmada: −2n−1) a (2n−1−1) ()n− 1) log102 Ada: rango -2**(n-1)..2**(n-1)-1
Insigned: 0 a 2n −1) n log102 Ada: rango 0,2**n-1, mod. 2**n; bibliotecas estándar o bibliotecas aritméticas arbitrarias de terceros Clases BigDecimal o Decimal en muchos idiomas como Python, C++, etc.

Distintas CPU admiten diferentes tipos de datos integrales. Por lo general, el hardware admitirá tipos firmados y no firmados, pero solo un conjunto pequeño y fijo de anchos.

La tabla anterior enumera los anchos de tipo integral que son compatibles con el hardware de los procesadores comunes. Los lenguajes de programación de alto nivel brindan más posibilidades. Es común tener un 'doble ancho' tipo integral que tiene el doble de bits que el tipo más grande compatible con hardware. Muchos lenguajes también tienen tipos de campo de bits (un número específico de bits, generalmente restringido a ser menor que el ancho máximo admitido por hardware) y tipos de rango (que pueden representar solo los enteros en un rango especificado).

Algunos lenguajes, como Lisp, Smalltalk, REXX, Haskell, Python y Raku, admiten enteros de precisión arbitraria (también conocidos como enteros de precisión infinita o números grandes). Otros lenguajes que no admiten este concepto como una construcción de nivel superior pueden tener bibliotecas disponibles para representar números muy grandes utilizando matrices de variables más pequeñas, como la clase BigInteger de Java. o Perl's "bigint" paquete. Estos usan tanta memoria de la computadora como sea necesario para almacenar los números; sin embargo, una computadora tiene solo una cantidad finita de almacenamiento, por lo que también pueden representar solo un subconjunto finito de los números enteros matemáticos. Estos esquemas admiten números muy grandes; por ejemplo, se podría usar un kilobyte de memoria para almacenar números de hasta 2466 dígitos decimales.

Un tipo booleano o indicador es un tipo que puede representar solo dos valores: 0 y 1, generalmente identificados con falso y verdadero respectivamente. Este tipo se puede almacenar en la memoria usando un solo bit, pero a menudo se le asigna un byte completo para facilitar el direccionamiento y la velocidad de acceso.

Una cantidad de cuatro bits se conoce como nibble (cuando se come, siendo más pequeña que un mordisco) o nybble (siendo un juego de palabras en la forma de la palabra byte). Un nibble corresponde a un dígito en hexadecimal y contiene un dígito o un código de signo en decimal codificado en binario.

Bytes y octetos

El término byte inicialmente significaba 'la unidad de memoria direccionable más pequeña'. En el pasado, se han utilizado bytes de 5, 6, 7, 8 y 9 bits. También ha habido computadoras que podían direccionar bits individuales ('máquina con direccionamiento de bits'), o que solo podían direccionar cantidades de 16 o 32 bits ('máquina con direccionamiento de palabra'). El término byte generalmente no se usaba en absoluto en conexión con máquinas con direcciones de bits y palabras.

El término octeto siempre se refiere a una cantidad de 8 bits. Se utiliza principalmente en el campo de las redes de computadoras, donde las computadoras con diferentes anchos de byte pueden tener que comunicarse.

En el uso moderno, byte significa casi invariablemente ocho bits, ya que todos los demás tamaños han caído en desuso; por lo tanto, byte se ha convertido en sinónimo de octet.

Palabras

El término 'palabra' se usa para un pequeño grupo de bits que son manejados simultáneamente por procesadores de una arquitectura particular. El tamaño de una palabra es, por lo tanto, específico de la CPU. Se han utilizado muchos tamaños de palabra diferentes, incluidos 6, 8, 12, 16, 18, 24, 32, 36, 39, 40, 48, 60 y 64 bits. Dado que es arquitectónico, el tamaño de una palabra generalmente lo establece la primera CPU de una familia, en lugar de las características de una CPU posterior compatible. Los significados de los términos derivados de palabra, como palabra larga, palabra doble, palabra cuádruple y media palabra, también varían con la CPU y el sistema operativo.

Prácticamente todos los nuevos procesadores de escritorio son capaces de utilizar palabras de 64 bits, aunque los procesadores integrados con tamaño de palabra de 8 y 16 bits siguen siendo comunes. La longitud de palabra de 36 bits era común en los primeros días de las computadoras.

Una causa importante de la no portabilidad del software es la suposición incorrecta de que todas las computadoras tienen el mismo tamaño de palabra que la computadora utilizada por el programador. Por ejemplo, si un programador que utiliza el lenguaje C declara incorrectamente como int una variable que se utilizará para almacenar valores mayores que 215−1, el El programa fallará en computadoras con números enteros de 16 bits. Esa variable debería haberse declarado como long, que tiene al menos 32 bits en cualquier computadora. Los programadores también pueden suponer incorrectamente que un puntero se puede convertir en un número entero sin pérdida de información, lo que puede funcionar en (algunas) computadoras de 32 bits, pero fallar en computadoras de 64 bits con punteros de 64 bits y enteros de 32 bits. Este problema lo resuelve C99 en stdint.h en forma de intptr_t .

Entero corto

Un entero corto puede representar un número entero que puede requerir menos almacenamiento, mientras que tiene un rango más pequeño, en comparación con un número entero estándar en la misma máquina.

En C, se denota por corto. Se requiere que tenga al menos 16 bits y, a menudo, es más pequeño que un número entero estándar, pero esto no es obligatorio. Un programa conforme puede suponer que puede almacenar con seguridad valores entre −(215−1) y 215−1, pero no puede suponer que el rango no es mayor. En Java, un short es siempre un número entero de 16 bits. En la API de Windows, el tipo de datos SHORT se define como un entero de 16 bits con signo en todas las máquinas.

Tamaños enteros cortos comunes
Lenguaje de programación Nombre del tipo de datos Signedness Tamaño en bytes Valor mínimo Valor máximo
C y C++ cortofirmado 2 −32.767 +32,767
corto no firmadono firmado 2 0 65.535
C# cortofirmado 2 −32.768 +32,767
ushortno firmado 2 0 65.535
Java cortofirmado 2 −32.768 +32,767

Entero largo

Un entero largo puede representar un entero entero cuyo rango es mayor o igual que el de un entero estándar en la misma máquina.

En C, se denota por long. Se requiere que tenga al menos 32 bits y puede o no ser más grande que un número entero estándar. Un programa conforme puede suponer que puede almacenar con seguridad valores entre −(231−1) y 231−1, pero no puede suponer que el rango no es mayor.

Tamaños enteros largos comunes
Lenguaje de programación Tipo de aprobación Plataformas Nombre del tipo de datos Almacenamiento en bytes Rango señalizado Rango no asignado
C ISO/ANSI C99 International Standard Sistemas Unix,16/32-bit
Sistemas Windows,16/32/64-bit
largo4
(requisito mínimo)
−2,147,483,647 a +2,147,483,647 0 a 4.294.967.295
(requisito mínimo)
C ISO/ANSI C99 International Standard Unix,
Sistemas de 64 bits
largo8
(requisito mínimo)
−9,223,372,036,854,775,807 a +9,223,372,036,854,775,807 0 a 18,446,744,073,709,551,615
C++ ISO/ANSI International Standard Unix, Windows,
Sistema 16/32-bit
largo4
(requisito mínimo)
−2,147,483,648 a +2,147,483,647
0 a 4.294.967.295
(requisito mínimo)
C++/CLI International Standard
ECMA-372
Unix, Windows,
Sistemas 16/32-bit
largo4
(requisito mínimo)
−2,147,483,648 a +2,147,483,647
0 a 4.294.967.295
(requisito mínimo)
VB Company Standard Windows Largo4 −2,147,483,648 a +2,147,483,647
VBA Company Standard Windows, Mac OS X Largo4 −2,147,483,648 a +2,147,483,647
SQL Server Company Standard Windows BigInt8 −9,223,372,036,854,775,808 a +9,223,372,036,854,775,807 0 a 18,446,744,073,709,551,615
C#/ VB. NET ECMA International Standard Microsoft.NET largo o Int648 −9,223,372,036,854,775,808 a +9,223,372,036,854,775,807 0 a 18,446,744,073,709,551,615
Java International/Company Standard Java plataforma largo8 −9,223,372,036,854,775,808 a +9,223,372,036,854,775,807
Pascal ? Windows, UNIX int648 −9,223,372,036,854,775,808 a +9,223,372,036,854,775,807 0 a 18,446,744,073,709,551,615 (tipo de palabra)

Largo largo

En la versión C99 del lenguaje de programación C y la versión C++11 de C++, se admite un tipo long long que tiene el doble de capacidad mínima que el estándar long. Este tipo no es compatible con los compiladores que requieren que el código C cumpla con el estándar C++ anterior, C++03, porque el tipo long long no existía en C++03. Para un compilador compatible con ANSI/ISO, los requisitos mínimos para los rangos especificados, es decir, −(263−1) a 263−1 para firmado y 0 a 264−1 para no firmado, debe cumplirse; sin embargo, se permite extender este rango. Esto puede ser un problema al intercambiar código y datos entre plataformas, o al acceder directamente al hardware. Por lo tanto, hay varios conjuntos de encabezados que proporcionan tipos de ancho exacto independientes de la plataforma. La biblioteca estándar de C proporciona stdint.h; esto se introdujo en C99 y C++11.

Sintaxis

Los literales para números enteros se pueden escribir como números arábigos regulares, que consisten en una secuencia de dígitos y con la negación indicada por un signo menos antes del valor. Sin embargo, la mayoría de los lenguajes de programación no permiten el uso de comas o espacios para la agrupación de dígitos. Ejemplos de literales enteros son:

Existen varios métodos alternativos para escribir literales enteros en muchos lenguajes de programación: