En los sistemas informáticos y electrónicos , el decimal codificado en binario ( BCD ) es una clase de codificaciones binarias de números decimales donde cada dígito está representado por un número fijo de bits , generalmente cuatro u ocho. A veces, se utilizan patrones de bits especiales para un signo u otras indicaciones (por ejemplo, error o desbordamiento).
En los sistemas orientados a bytes (es decir, la mayoría de las computadoras modernas), el término BCD desempaquetado [1] generalmente implica un byte completo para cada dígito (a menudo incluye un signo), mientras que el BCD empaquetado generalmente codifica dos dígitos dentro de un solo byte aprovechando la hecho de que cuatro bits son suficientes para representar el rango de 0 a 9. Sin embargo, la codificación precisa de 4 bits puede variar por razones técnicas (por ejemplo, Exceso-3 ).
Los diez estados que representan un dígito BCD a veces se denominan tétradas [2] [3] (porque el mordisco que normalmente se necesita para contenerlos también se conoce como tétrada), mientras que los estados no utilizados, no importa, se denominan pseudo-tétrada (e ) s , [4] [5] [6] [7] [8] pseudo-decimales [3] o pseudo-dígitos decimales . [9] [10] [nb 1]
La principal virtud de BCD, en comparación con los sistemas posicionales binarios , es su representación y redondeo más precisos de cantidades decimales, así como su facilidad de conversión en representaciones convencionales legibles por humanos. Sus principales inconvenientes son un ligero aumento en la complejidad de los circuitos necesarios para implementar la aritmética básica, así como un almacenamiento un poco menos denso.
BCD se utiliza en muchos de los primeros ordenadores decimales , y se implementa en el conjunto de instrucciones de las máquinas, como el IBM System / 360 series y sus descendientes, Digital Equipment Corporation 's VAX , el Burroughs B1700 , y el Motorola 68000 procesadores -series. BCD per se no se usa tan ampliamente como en el pasado y ya no se implementa en conjuntos de instrucciones de computadoras más nuevas (por ejemplo, ARM ); x86 ya no admite sus instrucciones BCD en modo largo . Sin embargo, los formatos decimales de coma fija y coma flotante siguen siendo importantes y continúan utilizándose en la informática financiera, comercial e industrial, donde la conversión sutil y los errores de redondeo fraccionario que son inherentes a las representaciones binarias de coma flotante no pueden tolerarse. [11]
Fondo
BCD aprovecha el hecho de que cualquier número decimal puede representarse mediante un patrón de cuatro bits. La forma más obvia de codificar dígitos es BCD natural (NBCD), donde cada dígito decimal está representado por su correspondiente valor binario de cuatro bits, como se muestra en la siguiente tabla. Esto también se denomina codificación "8421".
Dígito decimal | BCD | |||
---|---|---|---|---|
8 | 4 | 2 | 1 | |
0 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 0 | 1 |
2 | 0 | 0 | 1 | 0 |
3 | 0 | 0 | 1 | 1 |
4 | 0 | 1 | 0 | 0 |
5 | 0 | 1 | 0 | 1 |
6 | 0 | 1 | 1 | 0 |
7 | 0 | 1 | 1 | 1 |
8 | 1 | 0 | 0 | 0 |
9 | 1 | 0 | 0 | 1 |
Este esquema también puede denominarse decimal codificado en binario simple ( SBCD ) o BCD 8421 , y es la codificación más común. [12] Otros incluyen la codificación denominada "4221" y "7421", denominada así por la ponderación utilizada para los bits, y " Exceso-3 ". [13] Por ejemplo, el dígito 6 de BCD, 0110'b
en notación 8421, está 1100'b
en 4221 (son posibles dos codificaciones), 0110'b
en 7421, mientras que en Exceso-3 es 1001'b
().
Un poco | Peso | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | Comentario |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
4 | 8 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | Binario |
3 | 4 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | |
2 | 2 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | |
1 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | |
Nombre | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | Decimal | |
8 4 2 1 (XS-0) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | [14] [15] [16] [17] [nb 2] | |
7 4 2 1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | [18] [19] [20] | |||||||
Aiken (2 4 2 1) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | [14] [15] [16] [17] [nb 3] | |||||||
Exceso-3 (XS-3) | -3 | -2 | -1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | [14] [15] [16] [17] [nb 2] | |
Exceso-6 (XS-6) | -6 | -5 | -4 | -3 | -2 | -1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | [18] [nb 2] | |
Saltar en 2 (2 4 2 1) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | [16] [17] | |||||||
Saltar en 8 (2 4 2 1) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | [21] [22] [16] [17] [nb 4] | |||||||
4 2 2 1 (I) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | [16] [17] | |||||||
4 2 2 1 (II) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | [21] [22] | |||||||
5 4 2 1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | [18] [14] [16] [17] | |||||||
5 2 2 1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | [14] [16] [17] | |||||||
5 1 2 1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | [19] | |||||||
5 3 1 1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | [16] [17] | |||||||
Blanco (5 2 1 1) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | [23] [18] [14] [16] [17] | |||||||
5 2 1 1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | [24] | |||||||
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | |||
Cinta magnética | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | [15] | |||||||
Paul | 1 | 3 | 2 | 6 | 7 | 5 | 4 | 0 | 8 | 9 | [25] | |||||||
gris | 0 | 1 | 3 | 2 | 6 | 7 | 5 | 4 | 15 | 14 | 12 | 13 | 8 | 9 | 11 | 10 | [26] [14] [15] [16] [17] [nb 2] | |
Glixon | 0 | 1 | 3 | 2 | 6 | 7 | 5 | 4 | 9 | 8 | [27] [14] [15] [16] [17] | |||||||
Ledley | 0 | 1 | 3 | 2 | 7 | 6 | 4 | 5 | 8 | 9 | [28] | |||||||
4 3 1 1 | 0 | 1 | 2 | 3 | 5 | 4 | 6 | 7 | 8 | 9 | [19] | |||||||
LARC | 0 | 1 | 2 | 4 | 3 | 5 | 6 | 7 | 9 | 8 | [29] | |||||||
Klar | 0 | 1 | 2 | 4 | 3 | 9 | 8 | 7 | 5 | 6 | [2] [3] | |||||||
Petherick (RAE) | 1 | 3 | 2 | 0 | 4 | 8 | 6 | 7 | 9 | 5 | [30] [31] [nb 5] | |||||||
O'Brien I (vatios) | 0 | 1 | 3 | 2 | 4 | 9 | 8 | 6 | 7 | 5 | [32] [14] [16] [17] [nb 6] | |||||||
5-cíclico | 0 | 1 | 3 | 2 | 4 | 5 | 6 | 8 | 7 | 9 | [28] | |||||||
Tompkins I | 0 | 1 | 3 | 2 | 4 | 9 | 8 | 7 | 5 | 6 | [33] [14] [16] [17] | |||||||
Lippel | 0 | 1 | 2 | 3 | 4 | 9 | 8 | 7 | 6 | 5 | [34] [35] [14] | |||||||
O'Brien II | 0 | 2 | 1 | 4 | 3 | 9 | 7 | 8 | 5 | 6 | [32] [14] [16] [17] | |||||||
Tompkins II | 0 | 1 | 4 | 3 | 2 | 7 | 9 | 8 | 5 | 6 | [33] [14] [16] [17] | |||||||
Exceso-3 Gris | -3 | -2 | 0 | -1 | 4 | 3 | 1 | 2 | 12 | 11 | 9 | 10 | 5 | 6 | 8 | 7 | [16] [17] [20] [nb 7] [nb 2] | |
6 3 −2 −1 (I) | 3 | 2 | 1 | 0 | 5 | 4 | 8 | 9 | 7 | 6 | [29] [36] | |||||||
6 3 −2 −1 (II) | 0 | 3 | 2 | 1 | 6 | 5 | 4 | 9 | 8 | 7 | [29] [36] | |||||||
8 4 −2 −1 | 0 | 4 | 3 | 2 | 1 | 8 | 7 | 6 | 5 | 9 | [29] | |||||||
Lucal | 0 | 15 | 14 | 1 | 12 | 3 | 2 | 13 | 8 | 7 | 6 | 9 | 4 | 11 | 10 | 5 | [37] | |
Kautz I | 0 | 2 | 5 | 1 | 3 | 7 | 9 | 8 | 6 | 4 | [18] | |||||||
Kautz II | 9 | 4 | 1 | 3 | 2 | 8 | 6 | 7 | 0 | 5 | [18] [14] | |||||||
Susskind yo | 0 | 1 | 4 | 3 | 2 | 9 | 8 | 5 | 6 | 7 | [35] | |||||||
Susskind II | 0 | 1 | 9 | 8 | 4 | 3 | 2 | 5 | 6 | 7 | [35] | |||||||
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
La siguiente tabla representa dígitos decimales del 0 al 9 en varios sistemas de codificación BCD. En los encabezados, el " 8 4 2 1 " indica el peso de cada bit. En la quinta columna ("BCD 8 4 −2 −1"), dos de los pesos son negativos. También se muestran los códigos de caracteres ASCII y EBCDIC para los dígitos, que son ejemplos de BCD por zonas.
Dígito | BCD 8 4 2 1 | Código Stibitz o Exceso-3 | Código Aiken o BCD 2 4 2 1 | BCD 8 4 −2 −1 | IBM 702 , IBM 705 , IBM 7080 , IBM 1401 8421 | ASCII 0000 8421 | EBCDIC 0000 8421 |
---|---|---|---|---|---|---|---|
0 | 0000 | 0011 | 0000 | 0000 | 1010 | 0011 0000 | 1111 0000 |
1 | 0001 | 0100 | 0001 | 0111 | 0001 | 0011 0001 | 1111 0001 |
2 | 0010 | 0101 | 0010 | 0110 | 0010 | 0011 0010 | 1111 0010 |
3 | 0011 | 0110 | 0011 | 0101 | 0011 | 0011 0011 | 1111 0011 |
4 | 0100 | 0111 | 0100 | 0100 | 0100 | 0011 0100 | 1111 0100 |
5 | 0101 | 1000 | 1011 | 1011 | 0101 | 0011 0101 | 1111 0101 |
6 | 0110 | 1001 | 1100 | 1010 | 0110 | 0011 0110 | 1111 0110 |
7 | 0111 | 1010 | 1101 | 1001 | 0111 | 0011 0111 | 1111 0111 |
8 | 1000 | 1011 | 1110 | 1000 | 1000 | 0011 1000 | 1111 1000 |
9 | 1001 | 1100 | 1111 | 1111 | 1001 | 0011 1001 | 1111 1001 |
Como la mayoría de las computadoras manejan datos en bytes de 8 bits , es posible utilizar uno de los siguientes métodos para codificar un número BCD:
- Desempaquetado : Cada dígito decimal se codifica en un byte, con cuatro bits que representan el número y los bits restantes no tienen importancia.
- Empaquetado : Dos dígitos decimales se codifican en un solo byte, con un dígito en el nibble menos significativo ( bits 0 a 3 ) y el otro número en el nibble más significativo (bits 4 a 7). [nb 8]
Como ejemplo, la codificación del número decimal 91 utilizando BCD descomprimido da como resultado el siguiente patrón binario de dos bytes:
Decimal: 9 1Binario: 0000 1001 0000 0001
En BCD empaquetado, el mismo número cabría en un solo byte:
Decimal: 9 1Binario: 1001 0001
Por lo tanto, el rango numérico para un byte BCD sin empaquetar es de cero a nueve inclusive, mientras que el rango para un byte BCD empaquetado es de cero a noventa y nueve inclusive.
Para representar números mayores que el rango de un solo byte, se puede usar cualquier número de bytes contiguos. Por ejemplo, para representar el número decimal 12345 en BCD empaquetado, utilizando el formato big-endian , un programa codificaría de la siguiente manera:
Decimal: 0 1 2 3 4 5Binario: 0000 0001 0010 0011 0100 0101
Aquí, el nibble más significativo del byte más significativo se ha codificado como cero, por lo que el número se almacena como 012345 (pero las rutinas de formateo pueden reemplazar o eliminar los ceros iniciales ). BCD empaquetado es más eficiente en el uso de almacenamiento que BCD sin empaquetar; codificar el mismo número (con el cero a la izquierda) en formato descomprimido consumiría el doble de almacenamiento.
Las operaciones de cambio y enmascaramiento se utilizan para empaquetar o desempacar un dígito BCD empaquetado. Otras operaciones bit a bit se utilizan para convertir un número en su patrón de bit equivalente o invertir el proceso.
BCD empaquetado
En BCD empaquetado (o simplemente decimal empaquetado [38] ), cada uno de los dos nibbles de cada byte representa un dígito decimal. [nb 8] El BCD empaquetado se ha utilizado desde al menos la década de 1960 y se ha implementado en todo el hardware de mainframe de IBM desde entonces. La mayoría de las implementaciones son big endian , es decir, con el dígito más significativo en la mitad superior de cada byte y con el byte más a la izquierda (que reside en la dirección de memoria más baja) que contiene los dígitos más significativos del valor decimal empaquetado. El nibble inferior del byte más a la derecha se usa generalmente como bandera de signo, aunque algunas representaciones sin firmar carecen de una bandera de signo. Por ejemplo, un valor de 4 bytes consta de 8 nibbles, donde los 7 nibbles superiores almacenan los dígitos de un valor decimal de 7 dígitos, y el nibble más bajo indica el signo del valor entero decimal.
Los valores de signo estándar son 1100 ( hexadecimal C) para positivo (+) y 1101 (D) para negativo (-). Esta convención proviene del campo de zona para caracteres EBCDIC y la representación de overpunch firmada . Otros signos permitidos son 1010 (A) y 1110 (E) para positivo y 1011 (B) para negativo. Los procesadores IBM System / 360 usarán los signos 1010 (A) y 1011 (B) si el bit A está configurado en el PSW, para el estándar ASCII-8 que nunca pasó. La mayoría de las implementaciones también proporcionan valores BCD sin firmar con un nibble de signo de 1111 (F). [39] [40] [41] ILE RPG usa 1111 (F) para positivo y 1101 (D) para negativo. [42] Estos coinciden con la zona EBCDIC para dígitos sin un signo de superposición. En BCD empaquetado, el número 127 está representado por 0001 0010 0111 1100 (127C) y −127 está representado por 0001 0010 0111 1101 (127D). Los sistemas de Burroughs usaron 1101 (D) para negativo, y cualquier otro valor se considera un valor de signo positivo (los procesadores normalizarán un signo positivo a 1100 (C)).
Dígito de signo | BCD 8 4 2 1 | Firmar | Notas |
---|---|---|---|
A | 1 0 1 0 | + | |
B | 1 0 1 1 | - | |
C | 1 1 0 0 | + | Privilegiado |
D | 1 1 0 1 | - | Privilegiado |
mi | 1 1 1 0 | + | |
F | 1 1 1 1 | + | No firmado |
No importa cuántos bytes de ancho tenga una palabra , siempre hay un número par de nibbles porque cada byte tiene dos de ellos. Por lo tanto, una palabra de n bytes puede contener hasta (2 n ) -1 dígitos decimales, que siempre es un número impar de dígitos. Un número decimal con d dígitos requiere1/2( d +1) bytes de espacio de almacenamiento.
Por ejemplo, una palabra de 4 bytes (32 bits) puede contener siete dígitos decimales más un signo y puede representar valores que van desde ± 9,999,999. Por lo tanto, el número −1,234,567 tiene 7 dígitos de ancho y está codificado como:
0001 0010 0011 0100 0101 0110 0111 11011 2 3 4 5 6 7 -
Al igual que las cadenas de caracteres, el primer byte del decimal empaquetado, el que tiene los dos dígitos más significativos, generalmente se almacena en la dirección más baja de la memoria, independientemente del endianness de la máquina.
Por el contrario, un entero de complemento a dos binario de 4 bytes puede representar valores de −2,147,483,648 a +2,147,483,647.
Si bien BCD empaquetado no hace un uso óptimo del almacenamiento (usando aproximadamente un 20% más de memoria que la notación binaria para almacenar los mismos números), la conversión a ASCII , EBCDIC o las diversas codificaciones de Unicode se hace trivial, ya que no se requieren operaciones aritméticas. Los requisitos de almacenamiento adicionales generalmente se compensan con la necesidad de precisión y compatibilidad con la calculadora o el cálculo manual que proporciona la aritmética decimal de coma fija. Existen empaquetamientos más densos de BCD que evitan la penalización por almacenamiento y tampoco necesitan operaciones aritméticas para conversiones comunes.
El BCD empaquetado se admite en el lenguaje de programación COBOL como el tipo de datos "COMPUTATIONAL-3" (una extensión de IBM adoptada por muchos otros proveedores de compiladores) o "PACKED-DECIMAL" (parte del estándar COBOL de 1985). Se admite en PL / I como "DECIMAL FIJO". Además de IBM System / 360 y mainframes compatibles posteriores, el BCD empaquetado se implementa en el conjunto de instrucciones nativas de los procesadores VAX originales de Digital Equipment Corporation y algunos modelos de mainframes de la serie SDS Sigma , y es el formato nativo de Burroughs Corporation Medium Systems línea de mainframes (descendiente de la serie Electrodata 200 de la década de 1950 ).
Las representaciones en complemento de diez para números negativos ofrecen un enfoque alternativo para codificar el signo de números BCD empaquetados (y otros). En este caso, los números positivos siempre tienen un dígito más significativo entre 0 y 4 (inclusive), mientras que los números negativos están representados por el complemento de 10 del número positivo correspondiente. Como resultado, este sistema permite que los números BCD empaquetados de 32 bits oscilen entre −50,000,000 y +49,999,999, y −1 se representa como 99999999. (Al igual que con los números binarios en complemento a dos, el rango no es simétrico con respecto a cero).
Decimal empaquetado de punto fijo
Los números decimales de coma fija son compatibles con algunos lenguajes de programación (como COBOL, PL / I y Ada ). Estos lenguajes permiten al programador especificar un punto decimal implícito delante de uno de los dígitos. Por ejemplo, un valor decimal empaquetado codificado con los bytes 12 34 56 7C representa el valor de punto fijo +1,234.567 cuando el punto decimal implícito se encuentra entre los dígitos 4 y 5:
12 34 56 7C 12 34,56 7+
El punto decimal no se almacena realmente en la memoria, ya que el formato de almacenamiento BCD empaquetado no lo permite. Su ubicación es simplemente conocida por el compilador y el código generado actúa en consecuencia para las diversas operaciones aritméticas.
Codificaciones de mayor densidad
Si un dígito decimal requiere cuatro bits, tres dígitos decimales requieren 12 bits. Sin embargo, dado que 2 10 (1,024) es mayor que 10 3 (1,000), si se codifican tres dígitos decimales juntos, solo se necesitan 10 bits. Dos de estas codificaciones son la codificación Chen-Ho y la decimal densamente empaquetada (DPD). Este último tiene la ventaja de que los subconjuntos de la codificación codifican dos dígitos en los siete bits óptimos y un dígito en cuatro bits, como en BCD normal.
Decimal zonificado
Algunas implementaciones, por ejemplo, los sistemas mainframe de IBM , admiten representaciones numéricas decimales por zonas . Cada dígito decimal se almacena en un byte, y los cuatro bits inferiores codifican el dígito en forma BCD. Los cuatro bits superiores, llamados bits de "zona", generalmente se establecen en un valor fijo para que el byte contenga un valor de carácter correspondiente al dígito. Los sistemas EBCDIC utilizan un valor de zona de 1111 (F hexadecimal); esto produce bytes en el rango de F0 a F9 (hexadecimal), que son los códigos EBCDIC para los caracteres "0" a "9". De manera similar, los sistemas ASCII usan un valor de zona de 0011 (hex 3), dando códigos de caracteres del 30 al 39 (hex).
Para valores decimales con signo, el nibble de zona más a la derecha (menos significativo) contiene el dígito de signo, que es el mismo conjunto de valores que se utilizan para números decimales empaquetados con signo (ver arriba). Por lo tanto, un valor decimal dividido en zonas codificado como los bytes hexadecimales F1 F2 D3 representa el valor decimal con signo −123:
F1 F2 D31 2 −3
Tabla de conversión decimal con zonas EBCDIC
Dígito BCD | Hexadecimal | Carácter EBCDIC | ||||||
---|---|---|---|---|---|---|---|---|
0+ | C0 | A0 | E0 | F0 | {(*) | \ (*) | 0 | |
1+ | C1 | A1 | E1 | F1 | A | ~ (*) | 1 | |
2+ | C2 | A2 | E2 | F2 | B | s | S | 2 |
3+ | C3 | A3 | E3 | F3 | C | t | T | 3 |
4+ | C4 | A4 | E4 | F4 | D | tu | U | 4 |
5+ | C5 | A5 | E5 | F5 | mi | v | V | 5 |
6+ | C6 | A6 | E6 | F6 | F | w | W | 6 |
7+ | C7 | A7 | E7 | F7 | GRAMO | X | X | 7 |
8+ | C8 | A8 | E8 | F8 | H | y | Y | 8 |
9+ | C9 | A9 | E9 | F9 | I | z | Z | 9 |
0− | D0 | B0 | } (*) | ^ (*) | ||||
1− | D1 | B1 | J | |||||
2− | D2 | B2 | K | |||||
3− | D3 | B3 | L | |||||
4− | D4 | B4 | METRO | |||||
5− | D5 | B5 | norte | |||||
6− | D6 | B6 | O | |||||
7− | D7 | B7 | PAG | |||||
8− | D8 | B8 | Q | |||||
9− | D9 | B9 | R |
(*) Nota: Estos caracteres varían según la configuración de la página de códigos de caracteres local .
Decimal con zona de coma fija
Algunos idiomas (como COBOL y PL / I) admiten directamente valores decimales con zona de coma fija, asignando una coma decimal implícita en alguna ubicación entre los dígitos decimales de un número. Por ejemplo, dado un valor decimal zonificado de seis bytes con signo y un punto decimal implícito a la derecha del cuarto dígito, los bytes hexadecimales F1 F2 F7 F9 F5 C0 representan el valor +1 279,50:
F1 F2 F7 F9 F5 C01 2 7 9. 5 +0
BCD en computadoras
IBM
IBM utilizó los términos Código de intercambio decimal codificado en binario (BCDIC, a veces simplemente llamado BCD), para códigos alfanuméricos de 6 bits que representaban números, letras mayúsculas y caracteres especiales. Alguna variación de BCDIC alphamerics se utiliza en la mayoría de las primeras computadoras de IBM, incluyendo el IBM 1620 (presentado en 1959), Serie 1400 de IBM , y no decimal Arquitectura miembros de las series IBM 700/7000 .
La serie IBM 1400 son máquinas direccionables por caracteres, cada ubicación tiene seis bits etiquetados como B, A, 8, 4, 2 y 1, más un bit de verificación de paridad impar ( C ) y un bit de marca de palabra ( M ). Para codificar los dígitos del 1 al 9 , B y A son cero y el valor del dígito está representado por el BCD estándar de 4 bits en los bits del 8 al 1 . Para la mayoría de los demás caracteres, los bits B y A se derivan simplemente de las "perforaciones de zona" "12", "11" y "0" en el código de caracteres de la tarjeta perforada , y los bits 8 a 1 de las perforaciones 1 a 9 . Un punzón "12 zona" set tanto B y A , un "11 zona" conjunto B , y un "0 zona" (a 0 punzón combinado con cualquier otro) conjunto A . Así, la letra A , que es (12,1) en el formato de tarjeta perforada, está codificada (B, A, 1) . El símbolo de moneda $ , (11,8,3) en la tarjeta perforada, se codificó en la memoria como (B, 8,2,1) . Esto permite que el circuito para convertir entre el formato de tarjeta perforada y el formato de almacenamiento interno sea muy simple con solo unos pocos casos especiales. Un caso especial importante es el dígito 0 , representado por un solo 0 en la tarjeta y (8,2) en la memoria central. [43]
La memoria del IBM 1620 está organizada en dígitos direccionables de 6 bits, los habituales 8, 4, 2, 1 más F , que se utilizan como bit de bandera y C , un bit de verificación de paridad impar. Las letras alfabéticas BCD se codifican mediante pares de dígitos, con la "zona" en el dígito con dirección par y el "dígito" en el dígito con dirección impar, estando la "zona" relacionada con las "perforaciones de zona" 12 , 11 y 0 como en la serie 1400. Hardware de traducción de entrada / salida convertido entre los pares de dígitos internos y los códigos BCD estándar externos de 6 bits.
En el decimal Arquitectura IBM 7070 , IBM 7072 , y IBM 7074 alphamerics se codifican utilizando pares de dígitos (utilizando de dos fuera de cinco código en los dígitos, no BCD) de la palabra de 10 dígitos, con la "zona" en el dígito izquierdo y el "dígito" en el dígito derecho. Hardware de traducción de entrada / salida convertido entre los pares de dígitos internos y los códigos BCD estándar externos de 6 bits.
Con la introducción de System / 360 , IBM expandió las alfamerías BCD de 6 bits a EBCDIC de 8 bits, lo que permitió la adición de muchos más caracteres (por ejemplo, letras minúsculas). También se implementa un tipo de datos numéricos BCD empaquetados de longitud variable , que proporciona instrucciones de máquina que realizan operaciones aritméticas directamente en datos decimales empaquetados.
En IBM 1130 y 1800 , el BCD empaquetado es compatible con el software del paquete de subrutinas comerciales de IBM.
Hoy en día, los datos BCD todavía se utilizan mucho en procesadores y bases de datos de IBM , como IBM DB2 , mainframes y Power6 . En estos productos, el BCD suele ser BCD dividido en zonas (como en EBCDIC o ASCII), BCD empaquetado (dos dígitos decimales por byte) o codificación BCD "pura" (un dígito decimal almacenado como BCD en los cuatro bits inferiores de cada byte) . Todos estos se utilizan en registros de hardware y unidades de procesamiento, y en software. Para convertir decimales empaquetados en descargas de tablas EBCDIC en números legibles, puede utilizar la máscara OUTREC FIELDS del programa de utilidad JCL DFSORT. [44]
Otras computadoras
La serie VAX-11 de Digital Equipment Corporation incluye instrucciones que pueden realizar operaciones aritméticas directamente en datos BCD empaquetados y convertir entre datos BCD empaquetados y otras representaciones enteras. [41] El formato BCD empaquetado del VAX es compatible con el de IBM System / 360 y los procesadores compatibles posteriores de IBM. Las implementaciones de MicroVAX y VAX posteriores eliminaron esta capacidad de la CPU, pero mantuvieron la compatibilidad de código con máquinas anteriores al implementar las instrucciones faltantes en una biblioteca de software proporcionada por el sistema operativo. Esto se invoca automáticamente a través del manejo de excepciones cuando se encuentran las instrucciones difuntas, de modo que los programas que las usan pueden ejecutarse sin modificaciones en las máquinas más nuevas.
La arquitectura Intel x86 admite un formato BCD único de 18 dígitos (diez bytes) que se puede cargar y almacenar desde los registros de punto flotante, desde donde se pueden realizar los cálculos. [45]
La serie Motorola 68000 tenía instrucciones BCD. [46]
En las computadoras más recientes, estas capacidades casi siempre se implementan en software en lugar del conjunto de instrucciones de la CPU, pero los datos numéricos BCD siguen siendo extremadamente comunes en aplicaciones comerciales y financieras. Existen trucos para implementar operaciones BCD empaquetadas y operaciones de suma o resta decimales divididas en zonas utilizando secuencias cortas pero difíciles de entender de operaciones aritméticas binarias y lógicas en paralelo de palabras. [47] Por ejemplo, el siguiente código (escrito en C ) calcula una suma BCD empaquetada de 8 dígitos sin signo utilizando operaciones binarias de 32 bits:
uint32_t BCDadd ( uint32_t a , uint32_t b ) { uint32_t t1 , t2 ; // valores intermedios de 32 bits sin signo t1 = a + 0x06666666 ; t2 = t1 ^ b ; // suma sin propagación de acarreo t1 = t1 + b ; // suma provisional t2 = t1 ^ t2 ; // todos los bits de acarreo binarios t2 = ~ t2 & 0x11111110 ; // solo los bits de acarreo BCD t2 = ( t2 >> 2 ) | ( t2 >> 3 ); // corrección return t1 - t2 ; // suma BCD corregida }
BCD en electrónica
BCD es muy común en sistemas electrónicos donde se debe mostrar un valor numérico, especialmente en sistemas que consisten únicamente en lógica digital y no contienen un microprocesador. Al emplear BCD, la manipulación de datos numéricos para la visualización se puede simplificar en gran medida al tratar cada dígito como un subcircuito único separado. Esto se asemeja mucho más a la realidad física del hardware de pantalla: un diseñador puede optar por utilizar una serie de pantallas de siete segmentos idénticos e independientes para construir un circuito de medición, por ejemplo. Si la cantidad numérica se almacenara y manipulara como binario puro, la interfaz con dicha pantalla requeriría un circuito complejo. Por lo tanto, en los casos en que los cálculos son relativamente simples, trabajar con BCD puede conducir a un sistema en general más simple que convertir ay desde binario. La mayoría de las calculadoras de bolsillo hacen todos sus cálculos en BCD.
El mismo argumento se aplica cuando el hardware de este tipo utiliza un microcontrolador integrado u otro procesador pequeño. A menudo, representar números internamente en formato BCD da como resultado un código más pequeño, ya que una conversión desde o hacia una representación binaria puede ser costosa en procesadores tan limitados. Para estas aplicaciones, algunos procesadores pequeños cuentan con modos aritméticos dedicados, que ayudan al escribir rutinas que manipulan cantidades BCD. [48] [49]
Operaciones con BCD
Adición
Es posible realizar sumas agregando primero en binario y luego convirtiendo a BCD. La conversión de la suma simple de dos dígitos se puede hacer sumando 6 (es decir, 16 - 10) cuando el resultado de cinco bits de sumar un par de dígitos tiene un valor mayor que 9. La razón para sumar 6 es que hay 16 posibles valores BCD de 4 bits (desde 2 4 = 16), pero solo 10 valores son válidos (0000 a 1001). Por ejemplo:
1001 + 1000 = 10001 9 + 8 = 17
10001 es la representación binaria, no decimal, del resultado deseado, pero el 1 más significativo (el "acarreo") no puede caber en un número binario de 4 bits. En BCD como en decimal, no puede existir un valor superior a 9 (1001) por dígito. Para corregir esto, se agrega 6 (0110) al total, y luego el resultado se trata como dos nibbles:
10001 + 0110 = 00010111 => 0001 0111 17 + 6 = 23 1 7
Los dos nibbles del resultado, 0001 y 0111, corresponden a los dígitos "1" y "7". Esto produce "17" en BCD, que es el resultado correcto.
Esta técnica se puede ampliar para agregar varios dígitos agregando grupos de derecha a izquierda, propagando el segundo dígito como un acarreo, siempre comparando el resultado de 5 bits de cada suma de pares de dígitos con 9. Algunas CPU proporcionan un indicador de medio acarreo. para facilitar los ajustes aritméticos de BCD después de operaciones binarias de suma y resta.
Sustracción
La resta se realiza sumando el complemento de diez del sustraendo al minuendo . Para representar el signo de un número en BCD, el número 0000 se usa para representar un número positivo y 1001 se usa para representar un número negativo . Las 14 combinaciones restantes son signos inválidos. Para ilustrar la resta BCD con signo, considere el siguiente problema: 357 - 432.
En BCD con signo, 357 es 0000 0011 0101 0111. El complemento de diez de 432 se puede obtener tomando el complemento de nueve de 432 y luego sumando uno. Entonces, 999 - 432 = 567 y 567 + 1 = 568. Al anteponer 568 en BCD por el código de signo negativo, se puede representar el número −432. Entonces, −432 en BCD con signo es 1001 0101 0110 1000.
Ahora que ambos números están representados en BCD con signo, se pueden sumar:
0000 0011 0101 0111 0 3 5 7+ 1001 0101 0110 1000 9 5 6 8= 1001 1000 1011 1111 9 8 11 15
Dado que BCD es una forma de representación decimal, varias de las sumas de dígitos anteriores no son válidas. En el caso de que exista una entrada no válida (cualquier dígito BCD mayor que 1001), se agrega 6 para generar un bit de acarreo y hacer que la suma se convierta en una entrada válida. Entonces, agregar 6 a las entradas no válidas da como resultado lo siguiente:
1001 1000 1011 1111 9 8 11 15+ 0000 0000 0110 0110 0 0 6 6= 1001 1001 0010 0101 9 9 2 5
Por lo tanto, el resultado de la resta es 1001 1001 0010 0101 (−925). Para confirmar el resultado, tenga en cuenta que el primer dígito es 9, lo que significa negativo. Esto parece ser correcto, ya que 357 - 432 debería resultar en un número negativo. Los nibbles restantes son BCD, por lo que 1001 0010 0101 es 925. El complemento de diez de 925 es 1000 - 925 = 75, por lo que la respuesta calculada es −75.
Si se suma un número diferente de nibbles (como 1053 - 2), el número con menos dígitos primero debe tener un prefijo de ceros antes de tomar el complemento de diez o restar. Por lo tanto, con 1053 - 2, primero tendría que representarse 2 como 0002 en BCD, y tendría que calcularse el complemento de diez de 0002.
Comparación con binario puro
Ventajas
- Muchos valores no integrales, como el decimal 0.2, tienen una representación de valor posicional infinito en binario (.001100110011 ...) pero tienen un valor posicional finito en decimal codificado en binario (0.0010). En consecuencia, un sistema basado en representaciones decimales codificadas en binario de fracciones decimales evita errores al representar y calcular dichos valores. Esto es útil en cálculos financieros.
- Escalar por una potencia de 10 es simple.
- El redondeo al límite de un dígito decimal es más sencillo. La suma y la resta en decimal no requieren redondeo.
- La alineación de dos números decimales (por ejemplo, 1.3 + 27.08) es un cambio simple y exacto.
- La conversión a una forma de carácter o para visualización (p. Ej., A un formato basado en texto como XML , o para impulsar señales para una visualización de siete segmentos ) es una asignación simple por dígito y se puede hacer en formato lineal ( O ( n )) hora. La conversión de binario puro implica una lógica relativamente compleja que abarca dígitos y, para números grandes, no se conoce ningún algoritmo de conversión de tiempo lineal (consulte Sistema de numeración binario § Conversión hacia y desde otros sistemas de numeración ).
Desventajas
- Algunas operaciones son más complejas de implementar. Los sumadores requieren una lógica adicional para hacer que se envuelvan y generen un acarreo temprano. Se necesita entre un 15 y un 20 por ciento más de circuitos para agregar BCD en comparación con el binario puro. [ cita requerida ] La multiplicación requiere el uso de algoritmos que son algo más complejos que shift-mask-add (se requiere una multiplicación binaria , que requiere cambios y sumas binarios o el equivalente, por dígito o grupo de dígitos).
- El BCD estándar requiere cuatro bits por dígito, aproximadamente un 20 por ciento más de espacio que una codificación binaria (la relación de 4 bits a log 2 10 bits es 1,204). Cuando se empaqueta para que tres dígitos se codifiquen en diez bits, la sobrecarga de almacenamiento se reduce en gran medida, a expensas de una codificación que no está alineada con los límites de bytes de 8 bits comunes en el hardware existente, lo que resulta en implementaciones más lentas en estos sistemas.
- Las implementaciones prácticas existentes de BCD suelen ser más lentas que las operaciones en representaciones binarias, especialmente en sistemas integrados, debido al soporte limitado del procesador para operaciones BCD nativas. [50]
Variaciones representacionales
Existen varias implementaciones de BCD que emplean otras representaciones para los números. Las calculadoras programables fabricadas por Texas Instruments , Hewlett-Packard y otros suelen emplear un formato BCD de punto flotante , normalmente con dos o tres dígitos para el exponente (decimal). Los bits adicionales del dígito de signo se pueden usar para indicar valores numéricos especiales, como infinito , subdesbordamiento / desbordamiento y error (una pantalla parpadeante).
Variaciones firmadas
Los valores decimales con signo se pueden representar de varias formas. El lenguaje de programación COBOL , por ejemplo, admite cinco formatos decimales por zonas, y cada uno codifica el signo numérico de una manera diferente:
Tipo | Descripción | Ejemplo |
---|---|---|
No firmado | Sin señal mordisquear | F1 F2 F3 |
Final firmado (formato canónico) | Sign nibble en el último byte (menos significativo) | F1 F2 C3 |
Líder firmado (overpunch) | Signo nibble en el primer byte (más significativo) | C1 F2 F3 |
Firmado al final por separado | Byte de carácter de signo separado ( '+' o '−' ) después de los bytes de dígitos | F1 F2 F3 2B |
Firmado por separado | Byte de carácter de signo separado ( '+' o '−' ) que precede a los bytes de dígitos | 2B F1 F2 F3 |
Telefonía decimal codificada en binario (TBCD)
3GPP desarrolló TBCD , [51] una expansión a BCD donde las combinaciones de bits restantes (no utilizadas) se utilizan para agregar caracteres de telefonía específicos , [52] [53] con dígitos similares a los que se encuentran en el diseño original de los teclados telefónicos .
Dígito decimal | TBCD 8 4 2 1 |
---|---|
* | 1 0 1 0 |
# | 1 0 1 1 |
a | 1 1 0 0 |
B | 1 1 0 1 |
C | 1 1 1 0 |
Se usa como relleno cuando hay un número impar de dígitos. | 1 1 1 1 |
El documento 3GPP mencionado define TBCD-STRING con nibbles intercambiados en cada byte. Bits, octetos y dígitos indexados desde 1, bits desde la derecha, dígitos y octetos desde la izquierda.
bits 8765 del octeto n dígito de codificación 2 n
bits 4321 del octeto n dígito de codificación 2 ( n - 1) + 1
Número de significado 1234
, se convertiría 21 43
en TBCD.
Codificaciones alternativas
Si los errores en la representación y el cálculo son más importantes que la velocidad de conversión hacia y desde la pantalla, se puede utilizar una representación binaria escalada, que almacena un número decimal como un entero codificado en binario y un exponente decimal con signo codificado en binario. Por ejemplo, 0,2 se puede representar como 2 × 10 - 1 .
Esta representación permite una multiplicación y división rápidas, pero puede requerir un desplazamiento de una potencia de 10 durante la suma y la resta para alinear los puntos decimales. Es apropiado para aplicaciones con un número fijo de decimales que luego no requieren este ajuste, particularmente aplicaciones financieras donde 2 o 4 dígitos después del punto decimal suelen ser suficientes. De hecho, esta es casi una forma de aritmética de punto fijo, ya que la posición del punto de base está implícita.
Las codificaciones Hertz y Chen – Ho proporcionan transformaciones booleanas para convertir grupos de tres dígitos codificados en BCD hacia y desde valores de 10 bits [nb 1] que pueden codificarse eficientemente en hardware con solo 2 o 3 retardos de puerta. El decimal densamente empaquetado (DPD) es un esquema similar [nb 1] que se usa para la mayor parte del significado , excepto el dígito inicial, para una de las dos codificaciones decimales alternativas especificadas en el estándar de coma flotante IEEE 754-2008 .
Solicitud
El BIOS de muchas computadoras personales almacena la fecha y la hora en BCD porque el chip de reloj en tiempo real MC6818 utilizado en la placa base IBM PC AT original proporcionó la hora codificada en BCD. Este formulario se convierte fácilmente en ASCII para su visualización. [54] [55]
La familia de computadoras Atari de 8 bits utilizó BCD para implementar algoritmos de punto flotante. El procesador MOS 6502 tiene un modo BCD que afecta las instrucciones de suma y resta. El software proporcionado por el fabricante de la computadora de mano Psion Organizer 1 también usó BCD por completo para implementar el punto flotante; Los modelos Psion posteriores utilizaron binarios exclusivamente.
Los primeros modelos de PlayStation 3 almacenan la fecha y la hora en BCD. Esto provocó una interrupción mundial de la consola el 1 de marzo de 2010. Los dos últimos dígitos del año almacenados como BCD se malinterpretaron como 16, lo que provocó un error en la fecha de la unidad, lo que hizo que la mayoría de las funciones fueran inoperables. Esto se conoce como el problema del año 2010 .
Historia legal
En el caso de 1972 Gottschalk v. Benson , la Corte Suprema de EE . UU. Revocó la decisión de un tribunal inferior que había permitido una patente para convertir números codificados en BCD a binarios en una computadora. La decisión señaló que una patente "se adelantaría por completo a la fórmula matemática y, en la práctica, sería una patente sobre el algoritmo en sí". [56] Este fue un juicio histórico que determinó la patentabilidad de software y algoritmos.
Ver también
- Decimal codificado bi-quinario
- Ternario codificado en binario (BCT)
- Decimal entero binario (BID)
- Codificación Chen – Ho
- Computadora decimal
- Decimal densamente empaquetado (DPD)
- | Preguntas frecuentes sobre decimales
- Double dabble , un algoritmo para convertir números binarios a BCD
- Problema del año 2000
Notas
- ^ a b c En una representación estándar empaquetada de 4 bits, hay 16 estados (cuatro bits por cada dígito) con 10 tétradas y 6 pseudo-tétradas , mientras que en esquemas más densamente empaquetados como Hertz , Chen-Ho o codificaciones DPD hay son menos, por ejemplo, solo 24 estados no utilizados en 1024 estados (10 bits para tres dígitos).
- ^ a b c d e Los estados de código (mostrados en negro) fuera del rango decimal 0–9 indican estados adicionales de la variante no BCD del código. En la variante de código BCD discutida aquí, son pseudo-tétradas.
- ^ El código Aiken es uno de varios códigos 2 4 2 1. También se conoce como código 2 * 4 2 1.
- ^ El código Jump-at-8 también se conoce como código asimétrico 2 4 2 1.
- ^ El código Petherick también se conoce como código Royal Aircraft Establishment (RAE).
- ^ El tipo de código de O'Brien I es también conocido como Watts código o decimal de código (WRD) Watts refleja.
- ^ El código Gray Excess-3 también se conoce comocódigo Gray - Stibitz .
- ^ a b De manera similar, a menudo se empaquetaban varios caracteres en palabras de máquina en miniordenadores , consulte IBM SQUOZE y DEC RADIX 50 .
Referencias
- ^ Intel. "manual de arquitectura ia32" (PDF) . Intel . Consultado el 1 de julio de 2015 .
- ^ a b Klar, Rainer (1 de febrero de 1970). "1.5.3 Konvertierung binär verschlüsselter Dezimalzahlen" [1.5.3 Conversión de números decimales codificados en binario]. Digitale Rechenautomaten - Eine Einführung [ Computadoras digitales - Introducción ]. Sammlung Göschen (en alemán). 1241 / 1241a (1 ed.). Berlín, Alemania: Walter de Gruyter & Co. / GJ Göschen'sche Verlagsbuchhandlung . Consultado el 13 de abril de 2020 . (205 páginas) (NB. Una reimpresión de 2019 de la primera edición está disponible en ISBN 3-11002793-3 , 978-3-11002793-8 . También existe una cuarta edición reelaborada y ampliada ). . págs. 17, 21. ISBN 3-11-083160-0. . Archiv-Nr. 7990709. Archivado desde el original el 18 de abril de 2020
- ^ a b c Klar, Rainer (1989) [1 de octubre de 1988]. "1.4 Códigos: Binär verschlüsselte Dezimalzahlen" [1.4 Códigos: Números decimales codificados en binario]. Digitale Rechenautomaten - Eine Einführung in die Struktur von Computerhardware [ Computadoras digitales - Introducción a la estructura del hardware de computadora ]. Sammlung Göschen (en alemán). 2050 (cuarta edición revisada). Berlín, Alemania: Walter de Gruyter & Co. págs. 25, 28, 38–39. ISBN 3-11011700-2. pag. 25:
[…] Die nicht erlaubten 0/1-Muster nennt man auch Pseudodezimalen. […]
(320 páginas) - ^ Schneider, Hans-Jochen (1986). Lexikon der Informatik und Datenverarbeitung (en alemán) (2 ed.). R. Oldenbourg Verlag München Wien. ISBN 3-486-22662-2.
- ^ Tafel, Hans Jörg (1971). Einführung in die digitale Datenverarbeitung [ Introducción al procesamiento de información digital ] (en alemán). Múnich: Carl Hanser Verlag . ISBN 3-446-10569-7.
- ^ Steinbuch, Karl W .; Weber, Wolfgang; Heinemann, Traute, eds. (1974) [1967]. Taschenbuch der Informatik - Band II - Struktur und Programmierung von EDV-Systemen . Taschenbuch der Nachrichtenverarbeitung (en alemán). 2 (3 ed.). Berlín, Alemania: Springer-Verlag . ISBN 3-540-06241-6. LCCN 73-80607 .
- ^ Tietze, Ulrich; Schenk, Christoph (6 de diciembre de 2012). Circuitos electrónicos avanzados . Springer Science & Business Media . ISBN 978-3642812415. 9783642812415 . Consultado el 5 de agosto de 2015 .
- ^ Kowalski, Emil (8 de marzo de 2013) [1970]. Electrónica nuclear . Springer-Verlag . doi : 10.1007 / 978-3-642-87663-9 . ISBN 978-3642876639. 9783642876639, 978-3-642-87664-6 . Consultado el 5 de agosto de 2015 .
- ^ Ferretti, Vittorio (13 de marzo de 2013). Wörterbuch der Elektronik, Datentechnik und Telekommunikation / Diccionario de electrónica, informática y telecomunicaciones: Teil 1: Deutsch-Englisch / Parte 1: Alemán-Inglés . 1 (2 ed.). Springer-Verlag. ISBN 978-3642980886. 9783642980886 . Consultado el 5 de agosto de 2015 .
- ^ Speiser, Ambrosius Paul (1965) [1961]. Digitale Rechenanlagen - Grundlagen / Schaltungstechnik / Arbeitsweise / Betriebssicherheit [ Ordenadores digitales - Conceptos básicos / Circuitos / Funcionamiento / Fiabilidad ] (en alemán) (2 ed.). ETH Zürich , Zürich, Suiza: Springer-Verlag / IBM . pag. 209. LCCN 65-14624 . 0978.
- ^ Cowlishaw, Mike F. (2015) [1981, 2008]. "Aritmética decimal general" . Consultado el 2 de enero de 2016 .
- ^ Evans, David Silvester (marzo de 1961). "Capítulo cuatro: Equipo auxiliar: relés de control de paridad y control de salida para digitalizadores". Datos digitales: su derivación y reducción para análisis y control de procesos (1 ed.). Londres, Reino Unido: Hilger & Watts Ltd / Interscience Publishers . págs. 46-64 [56-57] . Consultado el 24 de mayo de 2020 .(8 + 82 páginas) (NB. El código BCD 8421 de 4 bits con un bit de paridad adicional aplicado como bit menos significativo para lograr la paridad impar del código de 5 bits resultante también se conoce como código Ferranti ).
- ^ Lala, Parag K. (2007). Principios del diseño digital moderno . John Wiley e hijos . págs. 20-25. ISBN 978-0-470-07296-7.
- ^ a b c d e f g h yo j k l m n Berger, Erich R. (1962). "1.3.3. Die Codierung von Zahlen". Escrito en Karlsruhe, Alemania. En Steinbuch, Karl W. (ed.). Taschenbuch der Nachrichtenverarbeitung (en alemán) (1 ed.). Berlín / Göttingen / Nueva York: Springer-Verlag OHG . págs. 68–75. LCCN 62-14511 .(NB. El código Kautz mostrado ( II ), que contiene los ocho estados binarios disponibles con una cuenta impar de 1s, es una ligera modificación del código Kautz original ( I ), que contiene los ocho estados con una cuenta par de 1s, de modo que la inversión de los bits más significativos creará un complemento de 9 ).
- ^ a b c d e f Kämmerer, Wilhelm (mayo de 1969). "II.15. Struktur: Informationsdarstellung im Automaten". Escrito en Jena, Alemania. En Frühauf, Hans ; Kämmerer, Wilhelm; Schröder, Kurz; Winkler, Helmut (eds.). Automate digital: teoría, estructura, técnica, programación . Elektronisches Rechnen und Regeln (en alemán). 5 (1 ed.). Berlín, Alemania: Akademie-Verlag GmbH . pag. 161. Licencia no. 202-100 / 416/69. N º de pedido. 4666 ES 20 K 3. (NB. También existe una segunda edición de 1973).
- ^ a b c d e f g h i j k l m n o p q Dokter, Folkert; Steinhauer, Jürgen (18 de junio de 1973). Electrónica digital . Biblioteca técnica de Philips (PTL) / Macmillan Education (Reimpresión de la 1ª edición en inglés). Eindhoven, Países Bajos: The Macmillan Press Ltd. / NV Philips 'Gloeilampenfabrieken . doi : 10.1007 / 978-1-349-01417-0 . ISBN 978-1-349-01419-4. SBN 333-13360-9. Consultado el 11 de mayo de 2020 . (270 páginas) (NB. Se basa en una traducción del volumen I de la edición alemana en dos volúmenes).
- ^ a b c d e f g h i j k l m n o p q Dokter, Folkert; Steinhauer, Jürgen (1975) [1969]. Digitale Elektronik in der Meßtechnik und Datenverarbeitung: Theoretische Grundlagen und Schaltungstechnik . Philips Fachbücher (en alemán). I (mejorada y ampliada 5ª ed.). Hamburgo, Alemania: Deutsche Philips GmbH . pag. 50. ISBN 3-87145-272-6. (xii + 327 + 3 páginas) (NB. La edición alemana del volumen I se publicó en 1969, 1971, dos ediciones en 1972 y 1975. El volumen II se publicó en 1970, 1972, 1973 y 1975.)
- ^ a b c d e f Kautz, William H. (junio de 1954). "IV. Ejemplos A. Códigos binarios para decimales, n = 4". Codificación de datos optimizada para computadoras digitales . Registro de la Convención de la IRE, Convención Nacional de 1954, Parte 4 - Computadoras electrónicas y teoría de la información . Sesión 19: Teoría de la información III - Velocidad y Computación. Instituto de Investigación de Stanford, Stanford, California, EE.UU .: IRE págs. 47–57 [49, 51–52, 57]. Archivado desde el original el 3 de julio de 2020 . Consultado el 3 de julio de 2020 . pag. 52:
[…] La última columna [de la Tabla II], denominada "Mejor", da la fracción máxima posible con cualquier código, es decir, 0,60, la mitad de mejor que cualquier código convencional. Este extremo se alcanza con los diez [vértices fuertemente marcados del gráfico de la Fig.4 para n = 4, o, de hecho, con cualquier conjunto de diez combinaciones de códigos que incluyan los ocho con un par (o los ocho con un impar ) número de "unos". La segunda y tercera filas de la Tabla II enumeran el cambio decimal promedio y máximo por error binario único no detectado, y se han derivado utilizando las ecuaciones de la Sec. II para Δ 1 y δ 1 . El índice de confusión para decimales que utiliza el criterio de "cambio decimal" se toma como c ij = | i - j | i, j = 0, 1,… 9. Nuevamente, la disposición "Mejor" posible (la misma para promedio y pico), una de las cuales se muestra en la Fig. 4, es sustancialmente mejor que los códigos convencionales. […] Fig. 4 Código de confusión mínima para decimales . [...] δ 1 = 2 Δ 1 = 15 [...]
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] (11 páginas) (NB. Además del conjunto combinatorio de BCD de 4 bits " códigos de confusión mínima para decimales ", de los cuales el autor ilustra solo uno explícitamente (aquí reproducido como código I ) en forma de un gráfico de 4 bits, el autor también muestra un" código binario para datos analógicos "de 16 estados y 4 bits en forma de una tabla de códigos, que, sin embargo, no se discute aquí. El código II que se muestra aquí es una modificación del código que discutí por Berger ). - ^ a b c Chinal, Jean P. (enero de 1973). "3.3. Códigos de unidad de distancia". Escrito en París, Francia. Métodos de diseño de sistemas digitales . Traducido por Preston, Alan; Summer, Arthur (1ª ed. Inglesa). Berlín, Alemania: Akademie-Verlag / Springer-Verlag . pag. 46. doi : 10.1007 / 978-3-642-86187-1_3 . ISBN 978-0-387-05871-9. Licencia No. 202-100 / 542/73. Referencia 7617470 (6047) ES 19 B 1/20 K 3 . Consultado el 21 de junio de 2020 .(xviii + 506 páginas) (NB. El libro original francés de 1967 se llamó "Techniques Booléennes et Calculateurs Arithmétiques", publicado por Éditions Dunod .)
- ^ a b Manual militar: codificadores: ángulo del eje a digital (PDF) . Departamento de Defensa de los Estados Unidos . 1991-09-30. MIL-HDBK-231A. Archivado (PDF) desde el original el 25 de julio de 2020 . Consultado el 25 de julio de 2020 . (NB. Reemplaza MIL-HDBK-231 (AS) (1970-07-01).)
- ^ a b Stopper, Herbert (marzo de 1960). Escrito en Litzelstetten, Alemania. Runge, Wilhelm Tolmé (ed.). "Ermittlung des Codes und der logischen Schaltung einer Zähldekade". Telefunken-Zeitung (TZ) - Technisch-Wissenschaftliche Mitteilungen der Telefunken GMBH (en alemán). Berlín, Alemania: Telefunken . 33 (127): 13-19. (7 páginas)
- ^ a b Borucki, Lorenz; Dittmann, Joachim (1971) [julio de 1970, 1966, otoño de 1965]. "2.3 Códigos Gebräuchliche in der digitalen Meßtechnik". Escrito en Krefeld / Karlsruhe, Alemania. Digitale Meßtechnik: Eine Einführung (en alemán) (2 ed.). Berlín / Heidelberg, Alemania: Springer-Verlag . págs. 10-23 [12-14]. doi : 10.1007 / 978-3-642-80560-8 . ISBN 3-540-05058-2. LCCN 75-131547 . ISBN 978-3-642-80561-5 .(viii + 252 páginas) 1a edición
- ^ White, Garland S. (octubre de 1953). "Sistemas de números decimales codificados para computadoras digitales". Actas del Instituto de Ingenieros de Radio . Instituto de Ingenieros de Radio (IRE). 41 (10): 1450-1452. doi : 10.1109 / JRPROC.1953.274330 . eISSN 2162-6634 . ISSN 0096-8390 . S2CID 51674710 . (3 páginas)
- ^ "Diferentes tipos de códigos binarios" . Hub electrónico . 2019-05-01 [2015-01-28]. Sección 2.4 Código 5211. Archivado desde el original el 14 de noviembre de 2017 . Consultado el 4 de agosto de 2020 .
- ^ Paul, Matthias R. (10 de agosto de 1995) [1994]. "Unterbrechungsfreier Schleifencode" [Código de bucle continuo]. 1.02 (en alemán) . Consultado el 11 de febrero de 2008 .(NB. El autor llamó a este código Schleifencode (en inglés: "código de bucle"). Se diferencia del código BCD gris solo en la codificación del estado 0 para convertirlo en un código de unidad de distancia cíclica para aplicaciones rotativas de círculo completo. -El patrón de código cero permite la autocomprobación del bucle y el uso de las líneas de datos para una distribución de energía ininterrumpida).
- ^ Gray, Frank (17 de marzo de 1953) [13 de noviembre de 1947]. Comunicación por código de pulso (PDF) . Nueva York, Estados Unidos: Bell Telephone Laboratories, Incorporated . Patente de Estados Unidos 2.632.058 . Número de serie 785697. Archivado (PDF) desde el original el 5 de agosto de 2020 . Consultado el 5 de agosto de 2020 . (13 páginas)
- ^ Glixon, Harry Robert (marzo de 1957). "¿Puede aprovechar el código cíclico binario-decimal?" . Ingeniería de control . Technical Publishing Company , una división de Dun-Donnelley Publishing Corporation, Dun & Bradstreet Corp. 4 (3): 87–91. ISSN 0010-8049 . (5 páginas)
- ^ a b Ledley, Robert Steven ; Rotolo, Louis S .; Wilson, James Bruce (1960). "Parte 4. Diseño lógico de circuitos de computadora digital; Capítulo 15. Operaciones aritméticas en serie; Capítulo 15-7. Temas adicionales". Ingeniería en Computación y Control Digital (PDF) . Serie de ingeniería eléctrica y electrónica de McGraw-Hill (1 ed.). Nueva York, Estados Unidos: McGraw-Hill Book Company, Inc. (impresora: The Maple Press Company, York, Pensilvania, Estados Unidos). págs. 517–518. ISBN 0-07036981-X. ISSN 2574-7916 . LCCN 59015055 . OCLC 1033638267 . OL 5776493M . SBN 07036981-X. . arca: / 13960 / t72v3b312. Archivado (PDF) desde el original el 19 de febrero de 2021 . Consultado el 19 de febrero de 2021 . pag. 517:
[…] El código cíclico es ventajoso principalmente en el uso de circuitos de relé, porque entonces un relé pegajoso no dará un estado falso ya que se demora en pasar de un número cíclico al siguiente. Hay muchos otros códigos cíclicos que tienen esta propiedad. […]
[12] (xxiv + 835 + 1 páginas) (NB. Ledley clasificó el código cíclico descrito como un código binario cíclico con codificación decimal ). - ^ a b c d Savard, John JG (2018) [2006]. "Representaciones decimales" . quadibloc . Archivado desde el original el 16 de julio de 2018 . Consultado el 16 de julio de 2018 .
- ^ Petherick, Edward John (octubre de 1953). Un sistema cíclico progresivo decimal codificado en binario de representación de números (nota técnica MS15). Farnborough, Reino Unido: Royal Aircraft Establishment (RAE).(4 páginas) (NB. A veces se lo conoce como un sistema decimal codificado en binario codificado cíclico para representar números ).
- ^ Petherick, Edward John; Hopkins, AJ (1958). Algunos dispositivos digitales desarrollados recientemente para codificar las rotaciones de ejes (nota técnica MS21). Farnborough, Reino Unido: Royal Aircraft Establishment (RAE).
- ^ a b O'Brien, Joseph A. (mayo de 1956) [15/11/1955, 23/06/1955]. "Códigos decimales cíclicos para convertidores analógicos a digitales" . Transacciones del Instituto Americano de Ingenieros Eléctricos, Parte I: Comunicación y Electrónica . Bell Telephone Laboratories, Whippany, Nueva Jersey, EE. UU. 75 (2): 120-122. doi : 10.1109 / TCE.1956.6372498 . ISSN 0097-2452 . S2CID 51657314 . Documento 56-21 . Consultado el 18 de mayo de 2020 . (3 páginas) (NB. Este documento fue preparado para su presentación en la Reunión General de Invierno de AIEE, Nueva York, EE. UU., Del 30 de enero de 1956 al 03 de febrero de 1956).
- ^ a b Tompkins, Howard E. (septiembre de 1956) [16 de julio de 1956]. "Códigos binario-decimal de unidad de distancia para conmutación de dos pistas" . Transacciones IRE en computadoras electrónicas . Correspondencia. Escuela de Ingeniería Eléctrica Moore , Universidad de Pensilvania , Filadelfia, Pensilvania, EE. UU. EC-5 (3): 139. doi : 10.1109 / TEC.1956.5219934 . ISSN 0367-9950 . Consultado el 18 de mayo de 2020 . (1 pagina)
- ^ Lippel, Bernhard (diciembre de 1955). "Un código decimal para la conversión de analógico a digital". Transacciones IRE en computadoras electrónicas . EC-4 (4): 158-159. doi : 10.1109 / TEC.1955.5219487 . ISSN 0367-9950 . (2 páginas)
- ^ a b c Susskind, Alfred Kriss; Ward, John Erwin (28 de marzo de 1958) [1957, 1956]. "III.F. Códigos Unidad-Distancia / VI.E.2. Códigos Binarios Reflejados". Escrito en Cambridge, Massachusetts, EE. UU. En Susskind, Alfred Kriss (ed.). Notas sobre técnicas de conversión analógico-digital . Libros de tecnología en ciencia e ingeniería. 1 (3 ed.). Nueva York, EE. UU .: Technology Press del Instituto de Tecnología de Massachusetts / John Wiley & Sons, Inc. / Chapman & Hall, Ltd. págs. 3-7–3-8 [3-7], 3-10–3-16 [3-13–3-16], 6-65–6-60 [6-60].(x + 416 + 2 páginas) (NB. El contenido del libro fue preparado originalmente por miembros del personal del Laboratorio de Servomecanismos , Departamento de Ingeniería Eléctrica, MIT , para los Programas Especiales de Verano celebrados en 1956 y 1957. El código que Susskind presentó en realidad en su trabajo como "código de tipo de lectura" se muestra aquí como código de tipo II, mientras que el código de tipo I es una derivación menor con las dos columnas de bits más significativas intercambiadas para ilustrar mejor las simetrías).
- ^ a b Yuen, Chun-Kwong (diciembre de 1977). "Una nueva representación de números decimales" . Transacciones IEEE en computadoras . C-26 (12): 1286-1288. doi : 10.1109 / TC.1977.1674792 . S2CID 40879271 . Archivado desde el original el 8 de agosto de 2020 . Consultado el 8 de agosto de 2020 .
- ^ Lucal, Harold M. (diciembre de 1959). "Operaciones aritméticas para computadoras digitales usando un binario reflejado modificado" . Transacciones IRE en computadoras electrónicas . EC-8 (4): 449–458. doi : 10.1109 / TEC.1959.5222057 . ISSN 0367-9950 . S2CID 206673385 . (10 páginas)
- ^ Dewar, Robert Berriedale Keith ; Smosna, Matthew (1990). Microprocesadores: una visión del programador (1 ed.). Courant Institute , Universidad de Nueva York , Nueva York, Estados Unidos: McGraw-Hill Publishing Company . pag. 14. ISBN 0-07-016638-2. LCCN 89-77320 . (xviii + 462 páginas)
- ^ "Capítulo 8: Instrucciones decimales". IBM System / 370 Principios de funcionamiento . IBM . Marzo de 1980.
- ^ "Capítulo 3: Representación de datos". Manual de arquitectura PDP-11 . Corporación de Equipos Digitales . 1983.
- ^ a b Manual de arquitectura VAX-11 . Corporación de Equipos Digitales . 1985.
- ^ "Referencia ILE RPG" .
- ^ IBM BM 1401/1440/1460/1410/7010 Tabla de códigos de caracteres en orden BCD [ enlace muerto permanente ]
- ^ http://publib.boulder.ibm.com/infocenter/zos/v1r12/index.jsp?topic=%2Fcom.ibm.zos.r12.iceg200%2Fenf.htm [ enlace muerto permanente ]
- ^ "4.7 BCD y enteros BCD empaquetados". Manual del desarrollador de software de arquitecturas Intel 64 e IA-32, Volumen 1: Arquitectura básica (PDF) . Version 072. 1 . Intel Corporation . 27 de mayo de 2020 [1997]. págs. 3–2, 4-9–4-11 [4-10]. 253665-072US. Archivado (PDF) desde el original el 6 de agosto de 2020 . Consultado el 6 de agosto de 2020 . pag. 4-10:
[…] Cuando se opera con números enteros BCD en registros de propósito general , los valores BCD se pueden descomprimir (un dígito BCD por byte) o empaquetar (dos dígitos BCD por byte). El valor de un entero BCD descomprimido es el valor binario del mediobyte bajo (bits 0 a 3). El medio byte alto (bits 4 a 7) puede ser cualquier valor durante la suma y la resta, pero debe ser cero durante la multiplicación y la división. Los enteros BCD empaquetados permiten que dos dígitos BCD estén contenidos en un byte. Aquí, el dígito en el medio byte alto es más significativo que el dígito en el medio byte bajo. […] Cuando se opera con números enteros BCD en registros de datos FPU x87 , los valores BCD se empaquetan en un formato de 80 bits y se denominan enteros decimales. En este formato, los primeros 9 bytes contienen 18 dígitos BCD, 2 dígitos por byte. El dígito menos significativo está contenido en el medio byte inferior del byte 0 y el dígito más significativo está contenido en el medio byte superior del byte 9. El bit más significativo del byte 10 contiene el bit de signo (0 = positivo y 1 = negativo; bits 0 a 6 del byte 10 son no les importa bits). Los enteros decimales negativos no se almacenan en forma de complemento a dos ; se distinguen de los enteros decimales positivos sólo por el bit de signo. El rango de enteros decimales que se pueden codificar en este formato es −10 18 + 1 a 10 18 - 1. El formato de entero decimal existe solo en la memoria. Cuando se carga un entero decimal en un registro de datos FPU x87, se convierte automáticamente al formato de punto flotante de precisión extendida doble . Todos los enteros decimales se pueden representar exactamente en formato de precisión extendida doble. […]
[13] - ^ url = http://www.tigernt.com/onlineDoc/68000.pdf
- ^ Jones, Douglas W. (25 de noviembre de 2015) [1999]. "Aritmética BCD, un tutorial" . Tutoriales de aritmética . Iowa City, Iowa, EE. UU .: Universidad de Iowa , Departamento de Ciencias de la Computación . Consultado el 3 de enero de 2016 .
- ^ Universidad de Alicante. "Una arquitectura basada en Cordic para cálculos decimales de alto rendimiento" (PDF) . IEEE . Consultado el 15 de agosto de 2015 .
- ^ "Rotación CORDIC decimal basada en selección por redondeo: algoritmo y arquitectura" (PDF) . Sociedad Británica de Computación . Consultado el 14 de agosto de 2015 .
- ^ Mathur, Aditya P. (1989). Introducción a los microprocesadores (3 ed.). Tata McGraw-Hill Publishing Company Limited . ISBN 978-0-07-460222-5.
- ^ 3GPP TS 29.002: Especificación de la parte de aplicación móvil (MAP) (informe técnico). 2013. sec. 17.7.8 Tipos de datos comunes.
- ^ "Directrices de protocolos de señalización y conmutación (SPS) para el uso de la notación de sintaxis abstracta uno (ASN.1) en protocolos de aplicación de telecomunicaciones" (PDF) . pag. 15.
- ^ "Especificación de la parte de la aplicación móvil XOM (XMAP)" (PDF) . pag. 93. Archivado desde el original (PDF) el 21 de febrero de 2015 . Consultado el 27 de junio de 2013 .
- ^ http://www.se.ecu.edu.au/units/ens1242/lectures/ens_Notes_08.pdf [ enlace muerto permanente ]
- ^ Hoja de datos MC6818
- ^ Gottschalk v. Benson , 409 U.S. 63, 72 (1972).
Otras lecturas
- Mackenzie, Charles E. (1980). Juegos de caracteres codificados, historia y desarrollo . Serie de programación de sistemas (1 ed.). Addison-Wesley Publishing Company, Inc. pág. xii. ISBN 0-201-14460-3. LCCN 77-90165 . Consultado el 22 de mayo de 2016 . [14]
- Richards, Richard Kohler (1955). Operaciones aritméticas en ordenadores digitales . Nueva York, Estados Unidos: van Nostrand . págs. 397–.
- Schmid, Hermann (1974). Computación decimal (1 ed.). Binghamton, Nueva York, Estados Unidos: John Wiley & Sons . ISBN 0-471-76180-X. y Schmid, Hermann (1983) [1974]. Computación decimal (1 (reimpresión) ed.). Malabar, Florida, EE.UU .: Robert E. Krieger Publishing Company. ISBN 0-89874-318-4.(NB. Al menos algunos lotes de la edición de reimpresión de Krieger eran erratas con páginas defectuosas 115-146).
- Massalin, Henry (octubre de 1987). Katz, Randy (ed.). "Superoptimizer: una mirada al programa más pequeño" (PDF) . Actas de la Segunda Conferencia Internacional sobre Soporte Arquitectónico para Lenguajes de Programación y Sistemas Operativos Revisión de Sistemas Operativos ACM SIGOPS . 21 (4): 122-126. doi : 10.1145 / 36204.36194 . ISBN 0-8186-0805-6. Archivado (PDF) desde el original el 4 de julio de 2017 . Consultado el 25 de abril de 2012 . Lay resumen (1995-06-14). (También: Avisos ACM SIGPLAN, Vol. 22 # 10, IEEE Computer Society Press # 87CH2440-6, octubre de 1987)
- Shirazi, Behrooz; Yun, David YY; Zhang, Chang N. (marzo de 1988). Diseños VLSI para suma decimal codificada en binario redundante . IEEE Séptima Conferencia Anual Internacional Phoenix sobre Computadoras y Comunicaciones, 1988. IEEE . págs. 52–56.
- Marrón; Vranesic (2003). Fundamentos de la lógica digital .
- Thapliyal, Himanshu; Arabnia, Hamid R. (noviembre de 2006). Sumador BCD Carry Look Ahead modificado con CMOS e implementación de lógica reversible . Actas de la Conferencia Internacional de Diseño de Computadoras de 2006 (CDES'06). Prensa CSREA. págs. 64–69. ISBN 1-60132-009-4.
- Kaivani, A .; Alhosseini, A. Zaker; Gorgin, S .; Fazlali, M. (diciembre de 2006). Implementación reversible del convertidor decimal empaquetado denso hacia y desde el formato decimal codificado en binario utilizando en IEEE-754R . IX Congreso Internacional de Tecnología de la Información (ICIT'06). IEEE . págs. 273–276.
- Cowlishaw, Mike F. (2009) [2002, 2008]. "Bibliografía de material sobre Aritmética Decimal - por categoría" . Aritmética decimal general . IBM . Consultado el 2 de enero de 2016 .
enlaces externos
- Cowlishaw, Mike F. (2014) [2000]. "Un resumen de la codificación de datos decimales de Chen-Ho" . Aritmética decimal general . IBM . Consultado el 2 de enero de 2016 .
- Cowlishaw, Mike F. (2007) [2000]. "Un resumen de la codificación decimal densamente empaquetada" . Aritmética decimal general . IBM . Consultado el 2 de enero de 2016 .
- Convierta BCD a decimal, binario y hexadecimal y viceversa
- BCD para Java