Decimal codificado en binario

Sistema de codificación digital de números

Un reloj binario podría utilizar LED para expresar valores binarios. En este reloj, cada columna de LED muestra un número decimal codificado en binario correspondiente al tiempo sexagesimal tradicional .

En sistemas informáticos y electrónicos , el sistema decimal codificado en binario ( BCD ) es una clase de codificación binaria de números decimales en la que cada dígito se representa mediante un número fijo de bits , normalmente 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 descomprimido [1] generalmente implica un byte completo para cada dígito (que a menudo incluye un signo), mientras que el BCD empaquetado generalmente codifica dos dígitos dentro de un solo byte aprovechando el hecho de que cuatro bits son suficientes para representar el rango de 0 a 9. Sin embargo, la codificación precisa de cuatro bits puede variar por razones técnicas (por ejemplo, Excess-3 ).

Los diez estados que representan un dígito BCD a veces se denominan tétradas [2] [3] (el nibble que normalmente se necesita para contenerlos también se conoce como tétrada), mientras que los estados no utilizados, que no importan , se denominan pseudo-tetrad(e)s  [de] , [4] [5] [6] [7] [8] pseudo-decimales [3] o dígitos pseudo-decimales . [9] [10] [nb 1]

La principal virtud del 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 a representaciones convencionales legibles por humanos. Sus principales desventajas son un ligero aumento en la complejidad de los circuitos necesarios para implementar la aritmética básica, así como un almacenamiento ligeramente menos denso.

El sistema BCD se utilizó en muchas de las primeras computadoras decimales y se implementa en el conjunto de instrucciones de máquinas como la serie IBM System/360 y sus descendientes, el VAX de Digital Equipment Corporation , el Burroughs B1700 y los procesadores Motorola de la serie 68000 .

El BCD en sí no se utiliza tan ampliamente como en el pasado y no está disponible o está limitado en los conjuntos de instrucciones más nuevos (por ejemplo, ARM ; x86 en modo largo ). Sin embargo, los formatos decimales de punto fijo y decimales de punto flotante siguen siendo importantes y se siguen utilizando en la informática financiera, comercial e industrial, donde no se pueden tolerar los errores sutiles de conversión y redondeo fraccionario que son inherentes a los formatos binarios de punto flotante. [11]

Fondo

El BCD aprovecha el hecho de que cualquier número decimal puede representarse mediante un patrón de cuatro bits. Una forma obvia de codificar dígitos es el BCD natural (NBCD), donde cada dígito decimal se representa mediante su valor binario de cuatro bits correspondiente, como se muestra en la siguiente tabla. Esto también se denomina codificación "8421".

Dígito decimalBCD
8421
00000
10001
20010
30011
40100
50101
60110
70111
81000
91001

Este esquema también puede denominarse Decimal Codificado Binario Simple ( SBCD ) o BCD 8421 , y es la codificación más común. [12] Otras incluyen las denominadas codificaciones "4221" y "7421" -nombradas así por la ponderación utilizada para los bits- y " Excess-3 ". [13] Por ejemplo, el dígito BCD 6, 0110'ben notación 8421, está 1100'ben 4221 (son posibles dos codificaciones), 0110'ben 7421, mientras que en Excess-3 está 1001'b( ). 6 + 3 = 9 {\estilo de visualización 6+3=9}

Códigos BCD de 4 bits y pseudo-tetradas
PocoPeso 0 1 2 3 4 5 6 7 8 9101112131415        Comentario        
480000000011111111Binario
340000111100001111
220011001100110011
110101010101010101
Nombre0123456789101112131415Decimal
8 4 2 1 (tallas XS a 0)0123456789101112131415[14] [15] [16] [17] [nota 2]
7 4 2 10123456 789     [18] [19] [20]
Aiken (2421)01234      56789[14] [15] [16] [17] [nota 3]
Exceso-3 (XS-3)-3-2-10123456789101112[14] [15] [16] [17] [nota 2]
Exceso-6 (XS-6)-6-5-4-3-2-10123456789[18] [n.º 2]
Salto a las 2 (2 4 2 1)01      23456789[16] [17]
Salto a las 8 (2 4 2 1)01234567      89[21] [22] [16] [17] [nota 4]
4 2 2 1 (yo)0123  45    6789[16] [17]
4 2 2 1 (II)0123  45  67  89[21] [22]
5 4 2 101234   56789   [18] [14] [16] [17]
5 2 2 10123  4 5678  9 [14] [16] [17]
5 1 2 10123   45678   9[19]
5 3 1 101 234  56 789  [16] [17]
Blanco (5 2 1 1)01 2 3 456 7 8 9[23] [18] [14] [16] [17]
5 2 1 101 2 3 45 6 7 89[24]
 0123456789101112131415
Cinta magnética 1234567890     [15]
Pablo 1326754 0  89  [25]
Gris0132675415141213891110[26] [14] [15] [16] [17] [nota 2]
Glixon013267549   8   [27] [14] [15] [16] [17]
Ledley01327645    8 9 [28]
4 3 1 101 23  54  67 89[19]
LARC01 2  4356 7  98[29]
Claro01 2  4398 7  56[2] [3]
Petherick (RAE) 132 04  867 95 [30] [31] [n.º 5]
O'Brien I (Watts)0132  4 9867  5 [32] [14] [16] [17] [nota 6]
5-cíclico0132  4 5687  9 [28]
Tompkins yo0132  4  9  8756[33] [14] [16] [17]
Labio0123  4  9  8765[34] [35] [14]
O'Brien II 0214 3  9785 6 [32] [14] [16] [17]
Tompkins II  0143 2 79856  [33] [14] [16] [17]
Exceso-3 Gris-3-20-1431212119105687[16] [17] [20] [n.° 7] [n.° 2]
6 3 −2 −1 (yo)    3210 5489 76[29] [36]
6 3 −2 −1 (II)0   321 654 987 [29] [36]
8 4 −2 −10   43218765   9[29]
Lucal0151411232138769411105[37]
Kautz yo0  2 513 79 86 4[18]
Kautz II 94 1 328 67 05 [18] [14]
Susskind yo 0 1 432 9 85 67[35]
Susskind II 0 1 9 84 325 67[35]
 0123456789101112131415

La siguiente tabla representa los dígitos decimales del 0 al 9 en varios sistemas de codificación BCD. En los encabezados, el " " 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 zonificado.8421

 
Dígito
CBC
8 4 2 1
 Código Stibitz o Exceso-3Código Aiken o BCD
2 4 2 1
CBC
8 4 −2 −1
IBM 702 , IBM 705 , IBM 7080 , IBM 1401 8421
ASCII
0000 8421
Código electrónico de identificación electrónica
0000 8421
0000000110000000010100011 00001111 0000
1000101000001011100010011 00011111 0001
2001001010010011000100011 00101111 0010
3001101100011010100110011 00111111 0011
4010001110100010001000011 01001111 0100
5010110001011101101010011 01011111 0101
6011010011100101001100011 01101111 0110
7011110101101100101110011 01111111 0111
8100010111110100010000011 10001111 1000
9100111001111111110010011 10011111 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 significado.
  • 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 numeral en el nibble más significativo (bits 4 a 7). [nb 8]

A modo de ejemplo, codificar el número decimal 91utilizando 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 descomprimido 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 utilizar cualquier cantidad de bytes contiguos. Por ejemplo, para representar el número decimal 12345en BCD empaquetado, utilizando el formato big-endian , un programa codificaría de la siguiente manera:

Decimales: 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 formato pueden reemplazar o eliminar los ceros iniciales). El BCD empaquetado es más eficiente en el uso del almacenamiento que el BCD desempaquetado; codificar el mismo número (con el cero inicial) en formato desempaquetado consumiría el doble de almacenamiento.

Las operaciones de desplazamiento y enmascaramiento se utilizan para comprimir o descomprimir un dígito BCD comprimido. Otras operaciones bit a bit se utilizan para convertir un número en su patrón de bits equivalente o invertir el proceso.

BCD empaquetado

En BCD empaquetado (o decimal empaquetado [38] ), cada nibble representa un dígito decimal. [nb 8] El BCD empaquetado se ha utilizado al menos desde 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 utiliza normalmente como indicador de signo, aunque algunas representaciones sin signo carecen de un indicador de signo.

Por ejemplo, un valor de 4 bytes consta de 8 nibbles, en los que los 7 nibbles superiores almacenan los dígitos de un valor decimal de 7 dígitos y el nibble inferior 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 sobrepunción con signo .

Otros signos permitidos son 1010 (A) y 1110 (E) para positivo y 1011 (B) para negativo. Los procesadores IBM System/360 utilizarán los signos 1010 (A) y 1011 (B) si el bit A está establecido en el PSW, para el estándar ASCII-8 que nunca pasó. La mayoría de las implementaciones también proporcionan valores BCD sin signo con un nibble de signo de 1111 (F). [39] [40] [41] ILE RPG utiliza 1111 (F) para positivo y 1101 (D) para negativo. [42] Estos coinciden con la zona EBCDIC para dígitos sin un sobrepunzón de signo. En BCD empaquetado, el número 127 se representa con 0001 0010 0111 1100 (127C) y −127 se representa con 0001 0010 0111 1101 (127D). Los sistemas de Burroughs usaban 1101 (D) para el signo 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
CBC
8 4 2 1
FirmarNotas
A1 0 1 0+ 
B1 0 1 1 
do1 1 0 0+Privilegiado
D1 1 0 1Privilegiado
mi1 1 1 0+ 
F1 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 requiere 1/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 se codifica 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 (aquel con los dos dígitos más significativos) generalmente se almacena en la dirección más baja de la memoria, independientemente del orden de bytes de la máquina.

Por el contrario, un entero binario de complemento a dos de 4 bytes puede representar valores desde −2.147.483.648 hasta +2.147.483.647.

Si bien el BCD empaquetado no hace un uso óptimo del almacenamiento (utiliza 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 vuelve trivial, ya que no se requieren operaciones aritméticas. Los requisitos de almacenamiento adicional generalmente se compensan con la necesidad de precisión y compatibilidad con calculadora o cálculo manual que proporciona la aritmética decimal de punto fijo. Existen empaquetamientos más densos de BCD que evitan la penalización de almacenamiento y tampoco necesitan operaciones aritméticas para las 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 "FIXED DECIMAL". Además de IBM System/360 y mainframes compatibles posteriores, el BCD empaquetado se implementa en el conjunto de instrucciones nativo 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 la línea de mainframes Burroughs Medium Systems (descendiente de la serie Electrodata 200 de los años 1950).

Las representaciones en complemento a 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 se representan mediante el complemento a 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 de complemento a dos, el rango no es simétrico respecto del cero).

Número decimal empaquetado en punto fijo

Algunos lenguajes de programación (como COBOL y PL/I) admiten números decimales con punto fijo . 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 el cuarto y el quinto dígito:

12 34 56 7C 12 34.56 7+

El punto decimal no se almacena en la memoria, ya que el formato de almacenamiento BCD empaquetado no lo permite. El compilador simplemente conoce su ubicación y el código generado actúa en consecuencia para las distintas operaciones aritméticas.

Codificaciones de mayor densidad

Si un dígito decimal requiere cuatro bits, entonces tres dígitos decimales requieren 12 bits. Sin embargo, dado que 2 10 (1024) es mayor que 10 3 (1000), 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 codificación decimal densamente empaquetada (DPD). Esta última 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 el BCD regular.

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 formato BCD. Los cuatro bits superiores, denominados bits de "zona", suelen tener 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 (hexadecimal F); esto produce bytes en el rango F0 a F9 (hexadecimal), que son los códigos EBCDIC para los caracteres "0" a "9". De manera similar, los sistemas ASCII utilizan un valor de zona de 0011 (hexadecimal 3), lo que da lugar a los códigos de caracteres del 30 al 39 (hexadecimal).

Para los valores decimales con signo, el nibble de la zona más a la derecha (menos significativo) contiene el dígito del signo, que es el mismo conjunto de valores que se utilizan para los números decimales empaquetados con signo (ver arriba). Por lo tanto, un valor decimal con signo codificado como los bytes hexadecimales F1 F2 D3 representa el valor decimal con signo −123:

Dos, tres, cuatro1 2 −3

Tabla de conversión de decimales por zonas EBCDIC

Dígito BCDHexadecimalCarácter EBCDIC
0+C0A0E0F0{ (*) \ (*)0
1+C1A1E1F1A~ (*) 1
2+C2A2E2F2BsS2
3+C3A3E3F3doayo3
4+C4A4E4F4D4
5+C5A5E5F5mienV5
6+C6A6E6F6FelYo6
7+C7A7E7F7GRAMOincógnitaincógnita7
8+C8A8E8F8yoyY8
9+C9A9E9F9IelO9
0−D0B0  } (*)^ (*)  
1−D1B1  Yo   
2−D2B2  K   
3−D3B3  yo   
4−D4B4  METRO   
5−D5B5  norte   
6−D6B6  Oh   
7−D7B7  PAG   
8−D8B8  Q   
9−D9B9  R   

(*) Nota: Estos caracteres varían según la configuración de la página de códigos de caracteres locales .

Decimal zonificado de punto fijo

Algunos lenguajes (como COBOL y PL/I) admiten directamente valores decimales con zona de punto fijo, asignando un punto decimal implícito en alguna ubicación entre los dígitos decimales de un número.

Por ejemplo, dado un valor decimal con signo de seis bytes con un punto decimal implícito a la derecha del cuarto dígito, los bytes hexadecimales F1 F2 F7 F9 F5 C0 representan el valor +1279,50:

F1, F2, F7, F9, F5, C01 2 7 9. 5 +0

Operaciones con BCD

Suma

Es posible realizar una suma sumando primero en binario y luego convirtiendo a BCD. La conversión de la suma simple de dos dígitos se puede realizar sumando 6 (es decir, 16 − 10) cuando el resultado de cinco bits de la suma de 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 (ya que 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 "carry") no cabe en un número binario de 4 bits. En BCD, al igual que en decimal, no puede existir un valor mayor que 9 (1001) por dígito. Para corregir esto, se suma 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 da como resultado "17" en BCD, que es el resultado correcto.

Esta técnica se puede extender a la suma de múltiples dígitos mediante la suma en grupos de derecha a izquierda, propagando el segundo dígito como un acarreo, comparando siempre 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 BCD después de las operaciones de suma y resta binarias. El Intel 8080 , el Zilog Z80 y las CPU de la familia x86 proporcionan el código de operación DAA (acumulador de ajuste decimal).

Sustracción

La resta se realiza sumando el complemento a diez del sustraendo al minuendo . Para representar el signo de un número en BCD, se utiliza el número 0000 para representar un número positivo y 1001 para representar un número negativo . Las 14 combinaciones restantes son signos no válidos. Para ilustrar la resta con signo en BCD, considere el siguiente problema: 357 − 432.

En BCD con signo, 357 es 0000 0011 0101 0111. El complemento a diez de 432 se puede obtener tomando el complemento a nueve de 432 y luego sumándole uno. Por lo tanto, 999 − 432 = 567 y 567 + 1 = 568. Si se antepone el código de signo negativo al 568 en BCD, se puede representar el número −432. Por lo tanto, −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 caso de que exista una entrada no válida (cualquier dígito BCD mayor que 1001), se suma 6 para generar un bit de acarreo y hacer que la suma se convierta en una entrada válida. Por lo tanto, sumar 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, observe que el primer dígito es 9, lo que significa negativo. Esto parece ser correcto ya que 357 − 432 debería dar como resultado un número negativo. Los nibbles restantes son BCD, por lo que 1001 0010 0101 es 925. El complemento a diez de 925 es 1000 − 925 = 75, por lo que la respuesta calculada es −75.

Si se suman diferentes cantidades de nibbles (como 1053 − 2), el número con menos dígitos debe ir precedido de ceros antes de tomar el complemento a diez o restar. Por lo tanto, con 1053 − 2, 2 tendría que representarse primero como 0002 en BCD y tendría que calcularse el complemento a diez de 0002.

BCD en computadoras

IBM

IBM utilizó el término Código de Intercambio Decimal Codificado en Binario (BCDIC, a veces llamado simplemente BCD) para códigos alfanuméricos de 6 bits que representaban números, letras mayúsculas y caracteres especiales. Algunas variaciones de los alfanuméricos BCDIC se utilizan en la mayoría de las primeras computadoras IBM, incluidas la IBM 1620 (introducida en 1959), la serie IBM 1400 y los miembros de arquitectura no decimal de la serie IBM 700/7000 .

Las máquinas IBM de la serie 1400 son 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 representado por el BCD estándar de 4 bits en los bits 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 al 1 de las perforaciones del 1 al 9. Una perforación de "zona 12" establece tanto B como A , una "zona 11" establece B , y una "zona 0" (una perforación 0 combinada con otras) establece A . Por lo tanto, la letra A , que es (12,1) en el formato de tarjeta perforada, se codifica (B,A,1) . El símbolo de moneda $ , (11,8,3) en la tarjeta perforada, fue codificado en la memoria como (B,8,2,1) . Esto permite que el circuito convierta entre el formato de tarjeta perforada y el formato de almacenamiento interno de manera muy simple con solo unos pocos casos especiales. Un caso especial importante es el dígito 0 , representado por un solo 0 perforado 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 , utilizado como bit de bandera y C , un bit de comprobación de paridad impar. Los alfanuméricos BCD se codifican utilizando pares de dígitos, con la "zona" en el dígito direccionado par y el "dígito" en el dígito direccionado impar, estando relacionada la "zona" con los "marcadores 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 externos estándar de 6 bits.

En la arquitectura decimal IBM 7070 , IBM 7072 e IBM 7074 , los alfanuméricos se codifican utilizando pares de dígitos (utilizando código de dos de cinco 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 externos estándar de 6 bits.

Con la introducción de System/360 , IBM amplió los caracteres alfanuméricos BCD de 6 bits a EBCDIC de 8 bits, lo que permite la incorporació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 está soportado en el software por el Paquete de Subrutinas Comerciales de IBM.

En la actualidad, los datos BCD se siguen utilizando mucho en bases de datos IBM como IBM Db2 y procesadores como z/Architecture y POWER6 y, posteriormente, procesadores Power ISA . En estos productos, el BCD suele ser BCD zonificado (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.

Otras computadoras

La serie VAX 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 de números enteros. [41] El formato BCD empaquetado de VAX es compatible con el de IBM System/360 y los procesadores compatibles posteriores de IBM. Las implementaciones MicroVAX y posteriores de VAX 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 obsoletas, de modo que los programas que las utilizan pueden ejecutarse sin modificaciones en las máquinas más nuevas.

Muchos procesadores tienen soporte de hardware para la aritmética de números enteros codificados en BCD. Por ejemplo, el 6502 , [44] [45] la serie Motorola 68000 , [46] y la serie x86 . [47] La ​​arquitectura x86 de Intel admite un formato BCD único de 18 dígitos (diez bytes) que se puede cargar y almacenar en los registros de punto flotante, desde donde se pueden realizar los cálculos. [48]

En computadoras más recientes, tales capacidades casi siempre se implementan en software en lugar de en el conjunto de instrucciones de la CPU, pero los datos numéricos BCD todavía son extremadamente comunes en aplicaciones comerciales y financieras.

Existen trucos para implementar operaciones de suma o resta de decimales zonificadas y BCD empaquetadas utilizando secuencias cortas pero difíciles de entender de lógica de palabras paralelas y operaciones aritméticas binarias. [49] Por ejemplo, el siguiente código (escrito en C ) calcula una suma BCD empaquetada sin signo de 8 dígitos 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 binario t2 = ~ t2 & 0x11111110 ; // solo los bits de acarreo BCD t2 = ( t2 >> 2 ) | ( t2 >> 3 ); // retorno de corrección t1 - t2 ; // suma BCD corregida }                                           

BCD en electrónica

El BCD es 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 que no contienen un microprocesador. Al emplear el BCD, la manipulación de datos numéricos para su visualización se puede simplificar en gran medida al tratar cada dígito como un subcircuito individual independiente.

Esto coincide mucho más con la realidad física del hardware de visualización: un diseñador podría optar por utilizar una serie de pantallas independientes de siete segmentos idénticos para construir un circuito de medición, por ejemplo. Si la cantidad numérica se almacenara y manipulara como binario puro, la interfaz con una pantalla de este tipo requeriría circuitos complejos. Por lo tanto, en los casos en que los cálculos son relativamente simples, trabajar con BCD puede conducir a un sistema general más simple que convertir a y 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, la representación interna de números en formato BCD da como resultado un código más pequeño, ya que una conversión desde o hacia la 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 a la hora de escribir rutinas que manipulan cantidades BCD. [50] [51]

Comparación con el binario puro

Ventajas

  • Escalar por una potencia de 10 es simple.
  • El redondeo en el límite de un dígito decimal es más sencillo. La suma y la resta en decimales no requieren redondeo. [ dudosodiscutir ]
  • La alineación de dos números decimales (por ejemplo 1,3 + 27,08) es un desplazamiento simple y exacto.
  • La conversión a un formato de carácter o para visualización (por ejemplo, a un formato basado en texto como XML , o para controlar señales para una pantalla de siete segmentos ) es una asignación simple por dígito y se puede realizar en tiempo lineal ( O ( n )). La conversión desde 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 en tiempo lineal (consulte Número binario § Conversión a y desde otros sistemas numéricos ).
  • Muchos valores no enteros, 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 en la representación y el cálculo de dichos valores, lo que resulta útil en los cálculos financieros.

Desventajas

  • 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. [52]
  • Algunas operaciones son más complejas de implementar. Los sumadores requieren lógica adicional para hacer que se envuelvan y generen un acarreo temprano. Además, se necesita entre un 15 y un 20 por ciento más de circuitos para la suma 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 el desplazamiento-máscara-suma (una multiplicación binaria , que requiere desplazamientos y sumas binarias o el equivalente, se requiere 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 de manera que se codifiquen tres dígitos 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 da como resultado implementaciones más lentas en estos sistemas.

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 otras 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 del signo se pueden utilizar para indicar valores numéricos especiales, como infinito , desbordamiento por debajo o por encima y error (una pantalla parpadeante).

Variaciones firmadas

Los valores decimales con signo se pueden representar de varias maneras. El lenguaje de programación COBOL , por ejemplo, admite cinco formatos decimales con zonas, cada uno de los cuales codifica el signo numérico de una manera diferente:

TipoDescripciónEjemplo
No firmadoNo hay señal de mordisqueoF1 F2 F3
Seguimiento firmado (formato canónico)Nibble de signo en el último byte (menos significativo)F1 F2 C3
Firmado en la parte delantera (sobrepunción)Nibble de signo en el primer byte (el más significativo)C1 F2 F3
Firmado al final por separadoByte de carácter de signo separado ( '+'o '−') después de los bytes de dígitosF1 F2 F3 2B
Firmado principal separadoByte de carácter de signo separado ( '+'o '−') que precede a los bytes de dígitos2B F1 F2 F3

Telefonía decimal codificada en binario (TBCD)

3GPP desarrolló TBCD , [53] una expansión de BCD donde las combinaciones de bits restantes (no utilizadas) se utilizan para agregar caracteres de telefonía específicos, [54] [55] con dígitos similares a los que se encuentran en el diseño original de los teclados telefónicos .


Dígito decimal
Fecha de cierre:
8 4 2 1
*1 0 1 0
#1 0 1 1
a1 1 0 0
b1 1 0 1
do1 1 1 0
Se utiliza 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 que codifica el dígito 2 n

bits 4321 del octeto n que codifica el dígito 2( n – 1) + 1

El significado del número 1234, quedaría 21 43en TBCD.

Este formato se utiliza en la telefonía móvil moderna para enviar números marcados, así como el ID del operador (la tupla MCC/MNC), IMEI , IMSI (SUPI), etc. [56] [57]

Codificaciones alternativas

Si los errores en la representación y el cálculo son más importantes que la velocidad de conversión a 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 multiplicar y dividir rápidamente, pero puede requerir un desplazamiento de una potencia de 10 durante la suma y la resta para alinear los puntos decimales. Es adecuada para aplicaciones con un número fijo de decimales que no requieren este ajuste, en particular aplicaciones financieras en las que 2 o 4 dígitos después del punto decimal suelen ser suficientes. De hecho, se trata casi de una forma de aritmética de punto fijo , ya que la posición del punto de la base está implícita.

Las codificaciones de Hertz y Chen–Ho proporcionan transformaciones booleanas para convertir grupos de tres dígitos codificados en BCD a y desde valores de 10 bits [nb 1] que se pueden codificar de manera eficiente en hardware con solo 2 o 3 retardos de compuerta. El decimal densamente empaquetado (DPD) es un esquema similar [nb 1] que se utiliza para la mayoría de los mantis , excepto el dígito principal, para una de las dos codificaciones decimales alternativas especificadas en el estándar de punto 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 madre original IBM PC AT proporcionaba la hora codificada en BCD. Este formato se convierte fácilmente a ASCII para su visualización. [58] [59]

Los ordenadores Atari de 8 bits utilizan un formato BCD para los números de coma flotante. El procesador MOS Technology 6502 tiene un modo BCD para las instrucciones de suma y resta. El software suministrado por el fabricante del ordenador portátil Psion Organiser 1 también utiliza BCD para implementar el punto flotante; los modelos posteriores de Psion utilizan exclusivamente el binario.

Los primeros modelos de la PlayStation 3 almacenaban la fecha y la hora en BCD. Esto provocó una interrupción mundial del servicio de la consola el 1 de marzo de 2010. Los dos últimos dígitos del año almacenados en BCD se malinterpretaron como 16, lo que provocó un error en la fecha de la unidad, lo que dejó inoperativas la mayoría de las funciones. Esto se ha denominado el problema del año 2010 .

En el caso Gottschalk v. Benson de 1972 , la Corte Suprema de Estados Unidos revocó la decisión de un tribunal inferior que había permitido una patente para convertir números codificados en BCD a binario en una computadora.

La decisión señaló que una patente "sustituiría totalmente la fórmula matemática y, en la práctica, sería una patente sobre el algoritmo mismo". [60] Esta fue una sentencia histórica que determinó la patentabilidad del software y los algoritmos .

Véase también

Notas

  1. ^ abc En una representación estándar empaquetada de 4 bits, hay 16 estados (cuatro bits para cada dígito) con 10 tétradas y 6 pseudo-tétradas , mientras que en esquemas más densamente empaquetados como las codificaciones Hertz , Chen–Ho o DPD hay menos, por ejemplo, solo 24 estados no utilizados en 1024 estados (10 bits para tres dígitos).
  2. ^ abcde Los estados del 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 del código BCD que se analiza aquí, son pseudotetradas.
  3. ^ El código Aiken es uno de varios códigos 2 4 2 1. También se lo conoce como código 2* 4 2 1.
  4. ^ El código Jump-at-8 también se conoce como código asimétrico 2 4 2 1.
  5. ^ El código Petherick también se conoce como código Royal Aircraft Establishment (RAE).
  6. ^ El código O'Brien tipo I también se conoce como código Watts o código decimal reflejado de Watts (WRD).
  7. ^ El código Gray Excess-3 también se conoce como código Gray - Stibitz .
  8. ^ ab De manera similar, en las minicomputadoras , a menudo se empaquetaban múltiples caracteres en palabras de máquina (consulte IBM SQUOZE y DEC RADIX 50) .

Referencias

  1. ^ Intel. «Manual de arquitectura ia32» (PDF) . Intel . Archivado (PDF) del original el 2022-10-09 . Consultado el 2015-07-01 .
  2. ^ ab 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). vol. 1241/1241a (1 ed.). Berlín, Alemania: Walter de Gruyter & Co. / GJ Göschen'sche Verlagsbuchhandlung  [de] . págs.17, 21. ISBN 3-11-083160-0. . Archiv-Nr. 7990709. Archivado desde el original el 18 de abril de 2020. Consultado el 13 de abril de 2020 .(205 páginas) (NB. Una reimpresión de 2019 de la primera edición está disponible bajo el ISBN 3-11002793-3 , 978-3-11002793-8 . También existe una cuarta edición reelaborada y ampliada). 
  3. ^ abc 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: una introducción a la estructura del hardware de una computadora ]. Sammlung Göschen (en alemán). vol. 2050 (cuarta edición reelaborada). 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)
  4. ^ Schneider, Hans-Jochen (1986). Lexikon der Informatik und Datenverarbeitung (en alemán) (2 ed.). R. Oldenbourg Verlag München Viena. ISBN 3-486-22662-2.
  5. ^ 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.
  6. ^ 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). vol. 2 (3 ed.). Berlín, Alemania: Springer-Verlag . ISBN 3-540-06241-6. Número de LCCN  73-80607.
  7. ^ Tietze, Ulrich; Schenk, Christoph (6 de diciembre de 2012). Circuitos electrónicos avanzados. Medios de ciencia y negocios de Springer . ISBN 978-3642812415. 9783642812415 . Consultado el 5 de agosto de 2015 .
  8. ^ 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 .
  9. ^ 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. vol. 1 (2 ed.). Springer-Verlag. ISBN 978-3642980886. 9783642980886 . Consultado el 5 de agosto de 2015 .
  10. ^ Speiser, Ambrosius Paul (1965) [1961]. Digitale Rechenanlagen - Grundlagen / Schaltungstechnik / Arbeitsweise / Betriebssicherheit [ Computadoras digitales - Conceptos básicos / Circuitos / Operación / Confiabilidad ] (en alemán) (2 ed.). ETH Zürich , Zúrich, Suiza: Springer-Verlag / IBM . pag. 209.LCCN 65-14624  . 0978.
  11. ^ Cowlishaw, Mike F. (2015) [1981, 2008]. "Aritmética decimal general" . Consultado el 2 de enero de 2016 .
  12. ^ Evans, David Silvester (marzo de 1961). "Capítulo cuatro: Equipo auxiliar: relés de control de paridad y de 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 ).
  13. ^ Lala, Parag K. (2007). Principios del diseño digital moderno. John Wiley & Sons . Págs. 20-25. ISBN. 978-0-470-07296-7.
  14. ^ abcdefghijklmn Berger, Erich R. (1962). "1.3.3. La codificación de Zahlen". Escrito en Karlsruhe, Alemania. En Steinbuch, Karl W. (ed.). Taschenbuch der Nachrichtenverarbeitung (en alemán) (1 ed.). Berlín / Gotinga / 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 un conteo impar de 1, es una ligera modificación del código Kautz original (I), que contiene los ocho estados con un conteo par de 1, de modo que la inversión de los bits más significativos creará un complemento de 9 ).
  15. ^ abcdef Kämmerer, Wilhelm [en alemán] (mayo de 1969). "II.15. Struktur: Informationsdarstellung im Automaten". Escrito en Jena, Alemania. En Frühauf, Hans [en alemán] ; Kämmerer, Wilhelm; Schröder, Kurz; Winkler, Helmut (eds.). Digitale Automaten: teoría, estructura, técnica y programación. Elektronisches Rechnen und Regeln (en alemán). vol. 5 (1 ed.). Berlín, Alemania: Akademie-Verlag GmbH . pag. 161. Licencia núm. 202-100/416/69. Nro. de pedido. 4666ES 20K 3.(NB. También existe una segunda edición de 1973.)
  16. ^ abcdefghijklmnopq Dokter, Folkert; Steinhauer, Jürgen (18 de junio de 1973). Electrónica Digital. Biblioteca técnica Philips (PTL) / Macmillan Education (Reimpresión de la primera edición en inglés). Eindhoven, Países Bajos: The Macmillan Press Ltd. / Gloeilampenfabrieken de NV Philips . doi :10.1007/978-1-349-01417-0. ISBN 978-1-349-01419-4.SBN 333-13360-9Archivado desde el original el 16 de julio de 2020. Consultado el 11 de mayo de 2020 .(270 páginas) (NB: Esto se basa en una traducción del volumen I de la edición alemana de dos volúmenes).
  17. ^ abcdefghijklmnopq 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). vol. 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.)
  18. ^ abcdef 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. Stanford Research Institute, Stanford, California, EE. UU.: IRE págs. 47–57 [49, 51–52, 57]. Archivado desde el original el 2020-07-03 . Consultado el 2020-07-03 . p. 52: […] La última columna [de la Tabla II], etiquetada como "Mejor", da la fracción máxima posible con cualquier código, es decir, 0,60, la mitad 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 número par (o los ocho con un número impar) de "1". 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 utilizando el criterio de "cambio decimal", se toma como c ij = |i − j| i,j = 0, 1, … 9. Nuevamente, la "Mejor" disposición 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 mínima confusión 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 "códigos de mínima confusión para decimales" BCD de 4 bits, de los cuales el autor ilustra sólo 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 analiza aquí. El código II que se muestra aquí es una modificación del código I analizado por Berger.)
  19. ^ abc Chinal, Jean P. (enero de 1973). "Códigos". Escrito en París, Francia. Métodos de diseño para sistemas digitales. Traducido por Preston, Alan; Summer, Arthur (1.ª edición en inglés). Berlín, Alemania: Akademie-Verlag / Springer-Verlag . p. 46. doi :10.1007/978-3-642-86187-1_3. ISBN 978-0-387-05871-9. Licencia n.º 202-100/542/73. Orden n.º 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  [fr] ).
  20. ^ 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 2020-07-25 . Consultado el 2020-07-25 .(NB. Reemplaza MIL-HDBK-231(AS) (1970-07-01).)
  21. ^ ab 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). 33 (127). Berlín, Alemania: Telefunken : 13-19.(7 páginas)
  22. ^ ab Borucki, Lorenz; Dittmann, Joachim (1971) [julio de 1970, 1966, otoño de 1965]. "2.3 Códigos Gebräuchliche en 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) 1ª edición
  23. ^ White, Garland S. (octubre de 1953). "Sistemas de números decimales codificados para computadoras digitales". Actas del Instituto de Ingenieros de Radio . 41 (10). Instituto de Ingenieros de Radio (IRE): 1450–1452. doi :10.1109/JRPROC.1953.274330. eISSN  2162-6634. ISSN  0096-8390. S2CID  51674710.(3 páginas)
  24. ^ "Diferentes tipos de códigos binarios". Electronic Hub . 2019-05-01 [2015-01-28]. Sección 2.4 Código 5211. Archivado desde el original el 2020-05-18 . Consultado el 2020-08-04 .
  25. ^ Paul, Matías 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 denominó a este código Schleifencode (en español: "código de bucle"). Se diferencia del código BCD de Gray solo en la codificación del estado 0, lo que lo convierte en un código de unidad de distancia cíclica para aplicaciones de anillos rozantes rotatorios de círculo completo . Evitar el patrón de código de todos ceros permite la autoprueba del bucle y el uso de las líneas de datos para una distribución de energía ininterrumpida).
  26. ^ Gray, Frank (1953-03-17) [1947-11-13]. Comunicación por código de pulsos (PDF) . Nueva York, EE. UU.: Bell Telephone Laboratories, Incorporated . Patente estadounidense 2.632.058 . Número de serie 785697. Archivado (PDF) desde el original el 2020-08-05 . Consultado el 2020-08-05 .(13 páginas)
  27. ^ Glixon, Harry Robert (marzo de 1957). "¿Se puede sacar provecho del código binario-decimal cíclico?". Ingeniería de control . 4 (3). Technical Publishing Company , una división de Dun-Donnelley Publishing Corporation, Dun & Bradstreet Corp .: 87–91. ISSN  0010-8049.(5 páginas)
  28. ^ ab Ledley, Robert Steven ; Rotolo, Louis S.; Wilson, James Bruce (1960). "Parte 4. Diseño lógico de circuitos de computadoras digitales; Capítulo 15. Operaciones aritméticas seriales; Capítulo 15-7. Temas adicionales". Ingeniería de control y computadoras digitales (PDF) . McGraw-Hill Electrical and Electronic Engineering Series (1.ª ed.). Nueva York, EE. UU.: McGraw-Hill Book Company, Inc. (impresora: The Maple Press Company, York, Pensilvania, EE. UU.). págs. 517–518. ISBN 0-07036981-X. ISSN  2574-7916. LCCN  59015055. OCLC  1033638267. OL  5776493M. SBN 07036981-X. . ark:/13960/t72v3b312. Archivado (PDF) del original el 2021-02-19 . Consultado el 2021-02-19 . p. 517: […] El código cíclico es ventajoso principalmente en el uso de circuitos de relé, ya que entonces un relé pegajoso no dará un estado falso ya que se retrasa 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 codificado decimal cíclico ).
  29. ^ abcd Savard, John JG (2018) [2006]. «Representaciones decimales». quadibloc . Archivado desde el original el 2018-07-16 . Consultado el 2018-07-16 .
  30. ^ Petherick, Edward John (octubre de 1953). Un sistema decimal codificado en binario cíclico y progresivo para representar números (nota técnica MS15). Farnborough, Reino Unido: Royal Aircraft Establishment (RAE).(4 páginas) (NB. A veces denominado " Sistema decimal codificado en binario y cíclico para representar números ").
  31. ^ 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).
  32. ^ ab O'Brien, Joseph A. (mayo de 1956) [15 de noviembre de 1955, 23 de junio de 1955]. "Códigos decimales cíclicos para convertidores analógicos a digitales". Transactions of the American Institute of Electrical Engineers, Part I: Communication and Electronics . 75 (2). Bell Telephone Laboratories, Whippany, Nueva Jersey, EE. UU.: 120–122. doi :10.1109/TCE.1956.6372498. ISSN  0097-2452. S2CID  51657314. Artículo 56-21. Archivado desde el original el 18 de mayo de 2020 . 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 la AIEE, Nueva York, EE. UU., del 30 de enero de 1956 al 3 de febrero de 1956.)
  33. ^ ab Tompkins, Howard E. (septiembre de 1956) [16 de julio de 1956]. "Códigos binarios decimales de unidad de distancia para conmutación de dos vías". IRE Transactions on Electronic Computers . Correspondencia. EC-5 (3). Moore School of Electrical Engineering , University of Pennsylvania , Philadelphia, Pennsylvania, EE. UU.: 139. doi :10.1109/TEC.1956.5219934. ISSN  0367-9950. Archivado desde el original el 18 de mayo de 2020 . Consultado el 18 de mayo de 2020 .(1 página)
  34. ^ Lippel, Bernhard (diciembre de 1955). "Un código decimal para la conversión de analógico a digital". IRE Transactions on Electronic Computers . EC-4 (4): 158–159. doi :10.1109/TEC.1955.5219487. ISSN  0367-9950.(2 páginas)
  35. ^ abc Susskind, Alfred Kriss; Ward, John Erwin (28 de marzo de 1958) [1957, 1956]. "III.F. Códigos de unidad de 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. Vol. 1 (3.ª ed.). Nueva York, EE. UU.: Technology Press del Instituto Tecnológico de Massachusetts / John Wiley & Sons, Inc. / Chapman & Hall, Ltd. pp. 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 lectura" se muestra aquí como código tipo II, mientras que el código tipo I es una derivación menor con las dos columnas de bits más significativos intercambiadas para ilustrar mejor las simetrías).
  36. ^ ab Yuen, Chun-Kwong (diciembre de 1977). "Una nueva representación para números decimales". IEEE Transactions on Computers . 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 .
  37. ^ Lucal, Harold M. (diciembre de 1959). "Operaciones aritméticas para computadoras digitales que utilizan un binario reflejado modificado". IRE Transactions on Electronic Computers . EC-8 (4): 449–458. doi :10.1109/TEC.1959.5222057. ISSN  0367-9950. S2CID  206673385.(10 páginas)
  38. ^ Dewar, Robert Berriedale Keith ; Smosna, Matthew (1990). Microprocesadores: la visión de un programador (1.ª ed.). Courant Institute , New York University , Nueva York, EE. UU.: McGraw-Hill Publishing Company . pág. 14. ISBN 0-07-016638-2. Número de LCCN  89-77320.(xviii+462 páginas)
  39. ^ "Capítulo 8: Instrucciones decimales". Principios de funcionamiento del IBM System/370 . IBM . Marzo de 1980.
  40. ^ "Capítulo 3: Representación de datos". Manual de arquitectura PDP-11 . Digital Equipment Corporation . 1983.
  41. ^ Manual de arquitectura del VAX-11 . Digital Equipment Corporation . 1985.
  42. ^ "Referencia de ILE RPG".
  43. ^ "Tabla de códigos de caracteres IBM 1401/1440/1460/1410/7010 en orden BCD" (PDF) .
  44. ^ "Conjunto de instrucciones 6502". Archivado desde el original el 8 de mayo de 2018.
  45. ^ "Códigos de operación NMOS 6502". Archivado desde el original el 14 de enero de 2016.
  46. ^ "El conjunto de instrucciones del 68000" (PDF) . Archivado (PDF) del original el 2023-11-20 . Consultado el 2023-11-21 .(58 páginas)
  47. ^ Manual del desarrollador de software de arquitecturas Intel 64 e IA-32 Volumen 1: Arquitectura básica (PDF) . Intel. Marzo de 2013. Sección 4.7. Archivado (PDF) desde el original el 2 de abril de 2013 . Consultado el 23 de abril de 2013 .
  48. ^ "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) . Versión 072. Vol. 1. Intel Corporation . 2020-05-27 [1997]. págs. 3–2, 4-9–4-11 [4-10]. 253665-072US. Archivado (PDF) desde el original el 2020-08-06 . Consultado el 2020-08-06 . pág. 4-10: […] Al operar con enteros BCD en registros de propósito general , los valores BCD se pueden desempaquetar (un dígito BCD por byte) o empaquetar (dos dígitos BCD por byte). El valor de un entero BCD desempaquetado es el valor binario del medio byte 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 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; los bits 0 a 6 del byte 10 son bits de no importa ). Los enteros decimales negativos no se almacenan en forma de complemento a dos ; Se distinguen de los enteros decimales positivos solo 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 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]
  49. ^ Jones, Douglas W. (25 de noviembre de 2015) [1999]. "BCD Arithmetic, a tutorial". Tutoriales de aritmética . Iowa City, Iowa, EE. UU.: The University of Iowa , Departamento de Ciencias de la Computación . Consultado el 3 de enero de 2016 .
  50. ^ Universidad de Alicante. "Una arquitectura basada en Cordic para cálculos decimales de alto rendimiento" (PDF) . IEEE . Archivado (PDF) desde el original el 5 de enero de 2010. Consultado el 15 de agosto de 2015 .
  51. ^ "Rotación decimal CORDIC basada en selección por redondeo: algoritmo y arquitectura" (PDF) . British Computer Society . Archivado (PDF) desde el original el 2022-10-09 . Consultado el 2015-08-14 .
  52. ^ Mathur, Aditya P. (1989). Introducción a los microprocesadores (3.ª edición). Tata McGraw-Hill Publishing Company Limited . ISBN 978-0-07-460222-5.
  53. ^ 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.
  54. ^ "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 aplicaciones de telecomunicaciones" (PDF) . p. 15. Archivado (PDF) desde el original el 4 de diciembre de 2013.
  55. ^ "Especificación de la parte de aplicación móvil XOM (XMAP)" (PDF) . p. 93. Archivado desde el original (PDF) el 21 de febrero de 2015 . Consultado el 27 de junio de 2013 .
  56. ^ "Protocolo Non-Access-Stratum (NAS) para sistemas 5G (5GS); Etapa 3. (3GPP TS 24.501 versión 16.10.0 Release 16) TS 24.501 release 16.10.0" (PDF) . ETSI y 3GPP . Archivado (PDF) del original el 2022-02-17 . Consultado el 2022-02-26 .(TS 24.501)
  57. ^ "Sistema de telecomunicaciones celulares digitales (Fase 2+) (GSM); Sistema universal de telecomunicaciones móviles (UMTS); LTE; 5G; Numeración, direccionamiento e identificación (3GPP TS 23.003 versión 16.8.0 Release 16)" (PDF) . ETSI y 3GPP . Archivado (PDF) desde el original el 2022-02-26 . Consultado el 2022-02-26 .(TS 23.003)
  58. ^ "Circuitos contadores de tiempo en una IBM PC" (PDF) . www.se.ecu.edu.au . Archivado desde el original (PDF) el 2008-10-10 . Consultado el 2022-05-22 .(7 páginas)
  59. ^ Ficha técnica del MC6818
  60. ^ Gottschalk v. Benson , 409 U.S. 63, 72 (1972).

Lectura adicional

  • Mackenzie, Charles E. (1980). Conjuntos de caracteres codificados, historia y desarrollo (PDF) . Serie de programación de sistemas (1.ª edición). Addison-Wesley Publishing Company, Inc. ISBN 978-0-201-14460-4. LCCN  77-90165. Archivado (PDF) del original el 26 de mayo de 2016. Consultado el 25 de agosto de 2019 .
  • Richards, Richard Kohler (1955). Operaciones aritméticas en computadoras digitales . Nueva York, EE. UU.: van Nostrand . pp. 397–.
  • Schmid, Hermann (1974). Cálculo decimal (1.ª ed.). Binghamton, Nueva York, EE. UU.: John Wiley & Sons . ISBN 0-471-76180-X.y Schmid, Hermann (1983) [1974]. Cálculo decimal (1.ª edición, reimpresión). Malabar, Florida, EE. UU.: Robert E. Krieger Publishing Company. ISBN 0-89874-318-4.(NB. Al menos algunos lotes de la edición reimpresa de Krieger tenían errores de impresión con las páginas 115-146 defectuosas).
  • Massalin, Henry (octubre de 1987). Katz, Randy (ed.). "Superoptimizer: Una mirada al programa más pequeño" (PDF) . ACM SIGOPS Operating Systems Review . 21 (4): 122–126. doi :10.1145/36204.36194. ISBN . 0-8186-0805-6Archivado (PDF) del original el 4 de julio de 2017. Consultado el 25 de abril de 2012 .(También: ACM SIGPLAN Notices, vol. 22 n.° 10, IEEE Computer Society Press n.° 87CH2440-6, octubre de 1987)
    • "Superoptimizador GNU". HP-UX .
  • Shirazi, Behrooz; Yun, David YY; Zhang, Chang N. (marzo de 1988). Diseños VLSI para la suma decimal redundante con codificación binaria . Séptima Conferencia Anual Internacional Phoenix sobre Computadoras y Comunicaciones del IEEE, 1988. IEEE . págs. 52–56.
  • Brown; Vranesic (2003). Fundamentos de la lógica digital .
  • Thapliyal, Himanshu; Arabnia, Hamid R. (noviembre de 2006). Sumador BCD de acarreo anticipado modificado con CMOS e implementación de lógica reversible . Actas de la Conferencia internacional de 2006 sobre diseño de computadoras (CDES'06). CSREA Press. págs. 64–69. ISBN 1-60132-009-4.
  • Kaivani, A.; Alhosseini, A. Zaker; Gorgin, S.; Fazlali, M. (diciembre de 2006). Implementación reversible de un convertidor decimal densamente empaquetado hacia y desde el formato decimal codificado en binario utilizando IEEE-754R . Novena Conferencia Internacional sobre 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 .
  • Cowlishaw, Mike F. (2014) [2000]. "Un resumen de la codificación de datos decimales 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 .
  • Convertir BCD a decimal, binario y hexadecimal y viceversa
  • BCD para Java
Retrieved from "https://en.wikipedia.org/w/index.php?title=Binary-coded_decimal&oldid=1248415907"