stringtranslate.com

Formato de número de computadora

Un formato de número de computadora es la representación interna de valores numéricos en hardware y software de dispositivos digitales, como computadoras y calculadoras programables . [1] Los valores numéricos se almacenan como agrupaciones de bits , como bytes y palabras. La codificación entre valores numéricos y patrones de bits se elige por conveniencia del funcionamiento de la computadora; [ cita necesaria ] la codificación utilizada por el conjunto de instrucciones de la computadora generalmente requiere conversión para uso externo, como para impresión y visualización. Los diferentes tipos de procesadores pueden tener diferentes representaciones internas de valores numéricos y se utilizan diferentes convenciones para números enteros y reales. La mayoría de los cálculos se llevan a cabo con formatos numéricos que caben en un registro del procesador, pero algunos sistemas de software permiten la representación de números arbitrariamente grandes utilizando varias palabras de memoria.

Representación de números binarios

Las computadoras representan datos en conjuntos de dígitos binarios. La representación se compone de bits, que a su vez se agrupan en conjuntos más grandes, como los bytes.

Un bit es un dígito binario que representa uno de dos estados . El concepto de bit puede entenderse como un valor de 1 o 0 , activado o desactivado , o no , verdadero o falso , o codificado por un interruptor o palanca de algún tipo.

Si bien un solo bit, por sí solo, puede representar solo dos valores, se puede usar una cadena de bits para representar valores más grandes. Por ejemplo, una cadena de tres bits puede representar hasta ocho valores distintos, como se ilustra en la Tabla 1.

A medida que aumenta el número de bits que componen una cadena, el número de combinaciones posibles de 0 y 1 aumenta exponencialmente . Un solo bit permite sólo dos combinaciones de valores, dos bits combinados pueden formar cuatro valores separados, tres bits ocho, y así sucesivamente, aumentando con la fórmula 2 n . La cantidad de combinaciones posibles se duplica con cada dígito binario agregado, como se ilustra en la Tabla 2.

Las agrupaciones con un número específico de bits se utilizan para representar diferentes cosas y tienen nombres específicos.

Un byte es una cadena de bits que contiene el número de bits necesarios para representar un carácter . En la mayoría de las computadoras modernas, se trata de una cadena de ocho bits. Debido a que la definición de byte está relacionada con la cantidad de bits que componen un carácter, algunas computadoras más antiguas han usado una longitud de bits diferente para su byte. [2] En muchas arquitecturas informáticas , el byte es la unidad direccionable más pequeña , el átomo de direccionabilidad, por ejemplo. Por ejemplo, aunque los procesadores de 64 bits pueden direccionar la memoria sesenta y cuatro bits a la vez, aún pueden dividir esa memoria en partes de ocho bits. Esto se llama memoria direccionable por bytes. Históricamente, muchas CPU leen datos en un múltiplo de ocho bits. [3] Debido a que el tamaño de byte de ocho bits es tan común, pero la definición no está estandarizada, el término octeto a veces se utiliza para describir explícitamente una secuencia de ocho bits.

Un nibble (a veces nybble ), es un número compuesto por cuatro bits. [4] Al ser de medio byte , el nibble fue nombrado como un juego de palabras. Una persona puede necesitar varios mordiscos por cada bocado de algo; de manera similar, un nybble es parte de un byte. Debido a que cuatro bits permiten dieciséis valores, un cuarteto a veces se conoce como dígito hexadecimal . [5]

Visualización de números octales y hexadecimales

La codificación octal y hexadecimal son formas convenientes de representar números binarios, tal como los utilizan las computadoras. Los ingenieros informáticos a menudo necesitan escribir cantidades binarias, pero en la práctica escribir un número binario como 1001001101010001 es tedioso y propenso a errores. Por lo tanto, las cantidades binarias se escriben en formato numérico de base 8 u "octal" o, mucho más comúnmente, de base 16, "hexadecimal" ( hex ). En el sistema decimal, hay 10 dígitos, del 0 al 9, que se combinan para formar números. En un sistema octal, sólo hay 8 dígitos, del 0 al 7. Es decir, el valor de un "10" octal es el mismo que el de un "8" decimal, un "20" octal es un "16" decimal, y así en. En un sistema hexadecimal, hay 16 dígitos, del 0 al 9 seguidos, por convención, de la A a la F. Es decir, un "10" hexadecimal es lo mismo que un "16" decimal y un "20" hexadecimal es lo mismo que un decimal "32". En el cuadro siguiente se describe un ejemplo y una comparación de números en diferentes bases.

Al escribir números, se utilizan caracteres de formato para describir el sistema numérico, por ejemplo, 000_0000B o 0b000_00000 para números binarios y 0F8H o 0xf8 para números hexadecimales.

Conversión entre bases

Cada uno de estos sistemas numéricos es un sistema posicional, pero mientras que los pesos decimales son potencias de 10, los pesos octales son potencias de 8 y los pesos hexadecimales son potencias de 16. Para convertir de hexadecimal u octal a decimal, para cada dígito se multiplica el valor del dígito por el valor de su posición y luego suma los resultados. Por ejemplo:

Representar fracciones en binario

Números de coma fija

El formato de punto fijo puede resultar útil para representar fracciones en binario.

Se debe elegir la cantidad de bits necesarios para la precisión y el rango deseado para almacenar las partes fraccionarias y enteras de un número. Por ejemplo, al utilizar un formato de 32 bits, se pueden utilizar 16 bits para el número entero y 16 para la fracción.

Al bit de ocho le sigue el bit de cuatro, luego el bit de dos y luego el bit de uno. Los bits fraccionarios continúan el patrón establecido por los bits enteros. El siguiente bit es el de la mitad, luego el de un cuarto, luego el de ⅛, y así sucesivamente. Por ejemplo:

Esta forma de codificación no puede representar algunos valores en binario. Por ejemplo, la fracción1/5, 0,2 en decimal, las aproximaciones más cercanas serían las siguientes:

Incluso si se utilizan más dígitos, una representación exacta es imposible. El número1/3, escrito en decimal como 0,333333333..., continúa indefinidamente. Si se cancela prematuramente, el valor no representaría1/3precisamente.

Números de punto flotante

Si bien en los sistemas digitales se utilizan enteros con y sin signo, ni siquiera un entero de 32 bits es suficiente para manejar todo el rango de números que una calculadora puede manejar, y eso ni siquiera incluye fracciones. Para aproximarnos al mayor rango y precisión de los números reales , tenemos que abandonar los números enteros con signo y los números de punto fijo y pasar a un formato de " punto flotante ".

En el sistema decimal, estamos familiarizados con los números de coma flotante de la forma ( notación científica ):

1,1030402 × 10 5 = 1,1030402 × 100000 = 110304,02

o, más compactamente:

1.1030402E5

que significa "1.1030402 por 1 seguido de 5 ceros". Tenemos un determinado valor numérico (1,1030402) conocido como " significado ", multiplicado por una potencia de 10 (E5, que significa 10 5 o 100.000), conocido como " exponente ". Si tenemos un exponente negativo, eso significa que el número se multiplica por 1 muchos lugares a la derecha del punto decimal. Por ejemplo:

2,3434E−6 = 2,3434 × 10 −6 = 2,3434 × 0,000001 = 0,0000023434

La ventaja de este esquema es que al usar el exponente podemos obtener un rango mucho más amplio de números, incluso si el número de dígitos en el significado, o la "precisión numérica", es mucho menor que el rango. Se pueden definir formatos binarios de punto flotante similares para computadoras. Hay varios esquemas de este tipo; el más popular ha sido definido por el Instituto de Ingenieros Eléctricos y Electrónicos (IEEE). La especificación estándar IEEE 754-2008 define un formato de punto flotante de 64 bits con:

Con los bits almacenados en 8 bytes de memoria:

donde "S" indica el bit de signo, "x" indica un bit exponente y "m" indica un bit significativo. Una vez extraídos los bits aquí, se convierten con el cálculo:

<signo> × (1 + <significado fraccionario>) × 2 <exponente> − 1023

Este esquema proporciona números válidos hasta aproximadamente 15 dígitos decimales, con el siguiente rango de números:

La especificación también define varios valores especiales que no son números definidos y se conocen como NaN , que significa "No es un número". Estos son utilizados por programas para designar operaciones no válidas y similares.

Algunos programas también utilizan números de punto flotante de 32 bits. El esquema más común utiliza un significado de 23 bits con un bit de signo, más un exponente de 8 bits en formato "exceso-127", lo que da siete dígitos decimales válidos.

Los bits se convierten a un valor numérico con el cálculo:

<signo> × (1 + <significado fraccionario>) × 2 <exponente> − 127

lo que lleva al siguiente rango de números:

Estos números de coma flotante se conocen como "reales" o "flotantes" en general, pero con varias variaciones:

Un valor flotante de 32 bits a veces se denomina "real32" o "single", que significa "valor de punto flotante de precisión simple".

Un flotante de 64 bits a veces se denomina "real64" o "doble", que significa "valor de punto flotante de doble precisión".

La relación entre números y patrones de bits se elige por conveniencia en la manipulación informática; ocho bytes almacenados en la memoria de la computadora pueden representar un real de 64 bits, dos reales de 32 bits, cuatro enteros con o sin signo, o algún otro tipo de datos que quepan en ocho bytes. La única diferencia es cómo los interpreta la computadora. Si la computadora almacenara cuatro números enteros sin signo y luego los leyera de la memoria como un real de 64 bits, casi siempre sería un número real perfectamente válido, aunque serían datos basura.

Sólo se puede representar un rango finito de números reales con un número determinado de bits. Las operaciones aritméticas pueden desbordarse o no, produciendo un valor demasiado grande o demasiado pequeño para ser representado.

La representación tiene una precisión limitada. Por ejemplo, sólo se pueden representar 15 dígitos decimales con un real de 64 bits. Si se suma un número de coma flotante muy pequeño a uno grande, el resultado es solo el grande. El pequeño número era demasiado pequeño para aparecer siquiera en 15 o 16 dígitos de resolución, y la computadora efectivamente lo descarta. Analizar el efecto de una precisión limitada es un problema bien estudiado. Las estimaciones de la magnitud de los errores de redondeo y los métodos para limitar su efecto en cálculos grandes son parte de cualquier proyecto de cálculo grande. El límite de precisión es diferente del límite de rango, ya que afecta al significado, no al exponente.

El significado es una fracción binaria que no necesariamente coincide perfectamente con una fracción decimal. En muchos casos, una suma de potencias recíprocas de 2 no coincide con una fracción decimal específica y los resultados de los cálculos serán ligeramente incorrectos. Por ejemplo, la fracción decimal "0,1" equivale a una fracción binaria que se repite infinitamente: 0,000110011... [6]

Números en lenguajes de programación.

La programación en lenguaje ensamblador requiere que el programador realice un seguimiento de la representación de los números. Cuando el procesador no admita una operación matemática requerida, el programador debe elaborar un algoritmo y una secuencia de instrucciones adecuados para llevar a cabo la operación; En algunos microprocesadores, incluso la multiplicación de números enteros debe realizarse mediante software.

Los lenguajes de programación de alto nivel como Ruby y Python ofrecen un número abstracto que puede ser de tipo expandido, como racional , bignum o complejo . Las operaciones matemáticas se llevan a cabo mediante rutinas de biblioteca proporcionadas por la implementación del lenguaje. Un símbolo matemático dado en el código fuente, mediante la sobrecarga del operador , invocará un código objeto diferente apropiado para la representación del tipo numérico; Las operaciones matemáticas con cualquier número (ya sea con signo, sin signo, racional, de punto flotante, de punto fijo, integral o complejo) se escriben exactamente de la misma manera.

Algunos lenguajes, como REXX y Java , proporcionan operaciones de punto flotante decimal, que proporcionan errores de redondeo de una forma diferente.

Ver también

notas y referencias

La versión inicial de este artículo se basó en un artículo de dominio público del Vectorsite de Greg Goebel.

  1. ^ Jon Stokes (2007). Dentro de la máquina: una introducción ilustrada a los microprocesadores y la arquitectura informática. Sin prensa de almidón. pag. 66.ISBN​ 978-1-59327-104-6.
  2. ^ "definición de bytes" . Consultado el 24 de abril de 2012 .
  3. ^ "Microprocesador y CPU (Unidad Central de Procesamiento)". Diccionario de red. Archivado desde el original el 3 de octubre de 2017 . Consultado el 1 de mayo de 2012 .
  4. ^ "definición de nybble" . Consultado el 3 de mayo de 2012 .
  5. ^ "Nybble". TechTerms.com . Consultado el 3 de mayo de 2012 .
  6. ^ Goebel, Greg. «Formato de numeración informática» . Consultado el 10 de septiembre de 2012 .