stringtranslate.com

Entero (informática)

En informática, un número 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 se les puede permitir o no contener 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 manera de representar un registro del procesador o una dirección de memoria como un número entero.

Valor y representación

El valor de un ítem de tipo integral es el entero matemático al que corresponde. Los tipos integrales pueden ser sin signo (capaces de representar sólo números enteros no negativos) o con signo (capaces de representar números enteros negativos también). [1]

Un valor entero generalmente se especifica en el código fuente de un programa como una secuencia de dígitos opcionalmente con el prefijo + 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 . [2]

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 número entero positivo es una cadena de bits , utilizando el sistema de numeración 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 2 n números; por ejemplo, un tipo sin signo normalmente representa los valores no negativos de 0 a 2 n −1. A veces se utilizan otras codificaciones de valores enteros en patrones de bits, por ejemplo, decimal codificado en binario o código Gray , o como códigos de caracteres impresos como ASCII .

Hay cuatro formas bien 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 que un tipo integral con signo con n bits represente números desde −2 ( n −1) hasta 2 ( n −1) −1. La aritmética en complemento a dos es conveniente porque existe una correspondencia perfecta uno a uno entre representaciones y valores (en particular, no hay +0 y −0 separados), y porque la suma , la resta y la multiplicación no necesitan distinguir entre tipos con signo y sin signo. . Otras posibilidades incluyen desplazamiento binario , signo-magnitud y complemento a uno .

Algunos lenguajes informáticos definen tamaños de números enteros de forma independiente de la máquina; otros tienen diferentes definiciones según el tamaño de palabra del procesador subyacente. No todas las implementaciones de lenguaje definen variables de todos los tamaños de 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.

Algunas arquitecturas informáticas más antiguas utilizaban representaciones decimales de números enteros, almacenadas en formato decimal codificado en binario (BCD) u otro formato. Estos valores generalmente requieren tamaños de datos de 4 bits por dígito decimal (a veces llamado nibble ) , generalmente con bits adicionales para un signo. Muchas CPU modernas brindan soporte limitado para números enteros decimales como un tipo de datos extendido, proporcionando instrucciones para convertir dichos valores hacia y desde valores binarios. Dependiendo de la arquitectura, los números enteros decimales pueden tener tamaños fijos (por ejemplo, 7 dígitos decimales más un signo en una palabra de 32 bits) o pueden tener una longitud variable (hasta un tamaño máximo de dígito), ocupando normalmente dos dígitos por byte. (octeto).

Tipos de datos integrales comunes

Diferentes CPU admiten diferentes tipos de datos integrales. Normalmente, el hardware admitirá tipos con y sin signo, 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 ofrecen más posibilidades. Es común tener un tipo integral de "doble ancho" que tiene el doble de bits que el tipo más grande compatible con hardware. Muchos lenguajes también tienen tipos de campos 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 números enteros en un rango específico).

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

Un tipo Booleano o Bandera es un tipo que puede representar sólo dos valores: 0 y 1, normalmente 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 (al comer, siendo más pequeña que un bocado ) o nybble (siendo un juego de palabras con 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 utilizaban bytes de 5, 6, 7, 8 y 9 bits. También ha habido computadoras que podían abordar bits individuales ("máquina con dirección de bits"), o que solo podían abordar cantidades de 16 o 32 bits ("máquina con dirección de palabra"). El término byte generalmente no se utilizaba en absoluto en relación con las 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 es posible que deban comunicarse computadoras con diferentes anchos de bytes.

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

Palabras

El término 'palabra' se utiliza para un pequeño grupo de bits que son manejados simultáneamente por procesadores de una arquitectura particular . Por tanto, el tamaño de una palabra depende de la CPU. Se han utilizado muchos tamaños de palabras 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 compatible posterior. Los significados de los términos derivados de palabra , como palabra larga , palabra doble , palabra cuádruple y media palabra , también varían según la CPU y el sistema operativo. [6]

Prácticamente todos los procesadores de escritorio nuevos son capaces de utilizar palabras de 64 bits, aunque todavía son comunes los procesadores integrados con tamaños de palabras de 8 y 16 bits. 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 usa el lenguaje C declara incorrectamente como int una variable que se usará para almacenar valores mayores que 2 15 −1, 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 formato .intptr_t

Entero corto

Un número entero corto puede representar un número entero que puede requerir menos almacenamiento, aunque 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 short . Se requiere que tenga al menos 16 bits y, a menudo, es más pequeño que un número entero estándar, pero no es obligatorio. [7] [8] Un programa conforme puede asumir que puede almacenar de forma segura valores entre −(2 15 −1) [9] y 2 15 −1, [10] pero no puede asumir que el rango no es mayor. En Java , un short es siempre un 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. [6]

Entero largo

Un número entero largo puede representar un número entero cuyo rango es mayor o igual que el de un número 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 mayor que un número entero estándar. Un programa conforme puede asumir que puede almacenar con seguridad valores entre −(2 31 −1) [9] y 2 31 −1, [10] pero no puede asumir que el rango no es mayor.

Largo largo

En la versión C99 del lenguaje de programación C y en la versión C++11 de C++ , long longse admite un tipo 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 sea compatible con el estándar C++ anterior, C++03, porque el tipo largo no existía en C++03. Para un compilador compatible con ANSI/ISO, los requisitos mínimos para los rangos especificados, es decir, −(2 63 −1) [9] a 2 63 −1 para firmado y 0 a 2 64 −1 para no firmado, [10] deben sentirse satisfecho; sin embargo, se permite ampliar este rango. [16] [17] Esto puede ser un problema al intercambiar código y datos entre plataformas, o al realizar acceso directo al hardware. Por lo tanto, existen 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 de números enteros se pueden escribir como números arábigos regulares , que constan de 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 agrupar dígitos . Ejemplos de literales enteros son:

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

Ver también

Notas

  1. ^ No todos los dialectos SQL tienen tipos de datos sin firmar. [3] [4]
  2. ^ abcdefghijklmn Los tamaños de char , short , int , long y long long en C/C++ dependen de la implementación del lenguaje.
  3. ^ Java no admite directamente la aritmética en tipos de caracteres . Los resultados deben devolverse a char desde un int .
  4. ^ ab Los tamaños de Integer y Cardinal de Delphi no están garantizados y varían de una plataforma a otra; generalmente se define como LongInt y LongWord respectivamente.
  5. ^ ab Reservado para uso futuro. Aun no implementado.
  6. ^ El estándar ISO C permite que las implementaciones reserven el valor con el bit de signo 1 y todos los demás bits 0 (para representación de signo-magnitud y complemento a dos) o con todos los bits 1 (para complemento de unos) para usarlo como valor de "trampa". Se utiliza para indicar (por ejemplo) un desbordamiento. [9]
  7. ^ abcd Los términos long e int son equivalentes [11]

Referencias

  1. ^ Cheever, Eric. "Representación de números". Universidad Swarthmore . Consultado el 11 de septiembre de 2011 .
  2. ^ Madhusudhan Konda (2 de septiembre de 2011). "Una mirada a las nuevas funciones de Java 7: O'Reilly Radar". Radar.oreilly.com . Consultado el 15 de octubre de 2013 .
  3. ^ "Sybase Adaptive Server Enterprise 15.5: tipos de datos numéricos exactos".
  4. ^ "Tipos de datos numéricos MySQL 5.6".
  5. ^ "BigInteger (Plataforma Java SE 6)". Oráculo . Consultado el 11 de septiembre de 2011 .
  6. ^ niebla abcde, 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 .
  7. ^ Giguere, Eric (18 de diciembre de 1987). "El estándar ANSI: un resumen para el programador de C" . Consultado el 4 de septiembre de 2010 .
  8. ^ ab Meyers, Randy (1 de diciembre de 2000). "La nueva C: enteros en C99, parte 1". drdobbs.com . Consultado el 4 de septiembre de 2010 .
  9. ^ abcd "ISO/IEC 9899:201x" (PDF) . open-std.org. sección 6.2.6.2, párrafo 2 . Consultado el 20 de junio de 2016 .
  10. ^ a b "ISO/IEC 9899:201x" (PDF) . open-std.org. sección 5.2.4.2.1 . Consultado el 20 de junio de 2016 .
  11. ^ "ISO/IEC 9899:201x" (PDF) . open-std.org . Consultado el 27 de marzo de 2013 .
  12. ^ "Tipos fundamentales en C++". cppreference.com . Consultado el 5 de diciembre de 2010 .
  13. ^ "Capítulo 8.6.2 en la página 12" (PDF) . ecma-international.org.
  14. ^ Archivo de ayuda de VB 6.0
  15. ^ "Los tipos de datos enteros, largos y de bytes (VBA)". microsoft.com . Consultado el 19 de diciembre de 2006 .
  16. ^ Giguere, Eric (18 de diciembre de 1987). "El estándar ANSI: un resumen para el programador de C" . Consultado el 4 de septiembre de 2010 .
  17. ^ "El lenguaje de programación estándar nacional estadounidense C especifica la sintaxis y la semántica de los programas escritos en el lenguaje de programación C". Archivado desde el original el 22 de agosto de 2010 . Consultado el 4 de septiembre de 2010 .
  18. ^ Borrador de la sexta edición de ECMAScript: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-literals-numeric-literals Archivado el 16 de diciembre de 2013 en Wayback Machine.