El código binario Exceso-3, o 3-exceso[1]​ (normalmente abreviado como XS-3 o X3[2][3]​) o código Stibitz[1]​ (por George Stibitz) es un código decimal codificado en binario autocomplementario y un sistema de numeración. Es una representación parcial. Exceso-3 fue utilizado en varias computadoras antiguas al igual que en cajas registradoras y calculadoras electrónicas portátiles en la década del '70, además de muchas otras cosas.

Representación

editar

Los códigos parciales son una forma de representar valores con un número balanceado de positivos y negativos utilizando un número preespecificado   como valor de parcialidad. Los códigos parciales (y los códigos Gray) son códigos no ponderados. En XS-3, los números son representados como dígitos decimales, y cada dígito es representado por cuatro bits como el valor del dígito más 3 (la cantidad "de exceso"):

  • El número binario más pequeño representa al valor más pequeño  exceso 
  • El número binario más grande representa al valor más grande  exceso 
Exceso-3 / Código Stibitz
Decimal Exceso-3 Stibitz BCD 8-4-2-1 Binario
-3 0000 Pseudo-tetradecanoico - -
-2 0001 Pseudo-tetradecanoico - -
-1 0010 Pseudo-tetradecanoico - -
0 0011 0011 0000 0000
1 0100 0100 0001 0001
2 0101 0101 0010 0010
3 0110 0110 0011 0011
4 0111 0111 0100 0100
5 1000 1000 0101 0101
6 1001 1001 0110 0110
7 1010 1010 0111 0111
8 1011 1011 1000 1000
9 1100 1100 1001 1001
10 1101 Pseudo-tetradecanoico Pseudo-tetradecanoico 1010
11 1110 Pseudo-tetradecanoico Pseudo-tetradecanoico 1011
12 1111 Pseudo-tetradecanoico Pseudo-tetradecanoico 1100
13 - - Pseudo-tetradecanoico 1101
14 - - Pseudo-tetradecanoico 1110
15 - - Pseudo-tetradecanoico 1111

Para codificar un número como el 127, uno simplemente codificada cada uno de los dígitos decimales de arriba, dando  

La aritmética de Exceso-3 utiliza algoritmos diferentes que los normalmente utilizados para BCDs o sistemas posicionales. Luego de añadir dos dígitos codificados en Exceso-3, la suma en crudo es Exceso-6. Por ejemplo, luego de añadir 1 (0100 en Exceso-3) y 2 (0101 en Exceso-3), el resultado de la suma parece ser 6 (1001 en Exceso-3) en lugar de 3 (0110 en Exceso-3). Para corregir este problema, luego de añadir dos dígitos, es necesario remover la parcialidad extra substrayendo el binario 0011 (decimal 3 en binario imparcial) si el dígito resultante es menos que el decimal 10, o substrayendo el binario 1101 (decimal 13 en binario imparcial) si ocurrió un desbordamiento de enteros. (En binarios de 4 bits, substraer el binario 1101 es equivalente a añadir 0011, y viceversa).

Motivación

editar

La ventaja primaria de la codificación XS-3 sobre la codificación imparcial es que un número decimal puede ser transformado en un complemento de nueve (para sustracción) tan fácilmente como un número binario puede ser transformado en un complemento de uno; sólo invirtiendo todos los bits. También, cuando la suma de dos dígitos codificados con XS-3 es mayor a 9, el bit de acarreo de un sumador de 4 bits se establecerá alto. Esto funciona debido a que, luego de añadir dos dígitos, un valor "de exceso" de 6 es el resultado de la suma, debido a que los enteros de 4 bits únicamente pueden soportar valores del 0 al 15, un exceso de 6 significa que cada suma sobre 9 se desbordará.

Ejemplo

editar

Convertidor de ejemplo de BCD a Exceso-3 (código VHDL):

entity bcdxs3 is
  port (
    a   : in    std_logic;
    b   : in    std_logic;
    c   : in    std_logic;
    d   : in    std_logic;

    an  : inout std_logic;
    bn  : inout std_logic;
    cn  : inout std_logic;
    dn  : inout std_logic;

    w   : out   std_logic;
    x   : out   std_logic;
    y   : out   std_logic;
    z   : out   std_logic
  );
end entity bcdxs3;

architecture dataflow of bcdxs3 is
begin
    an  <=  not a;
    bn  <=  not b;
    cn  <=  not c;
    dn  <=  not d;

    w   <=  (an and b  and d ) or (a  and bn and cn)
         or (an and b  and c  and dn);
    x   <=  (an and bn and d ) or (an and bn and c  and dn)
         or (an and b  and cn and dn) or (a  and bn and cn and d);
    y   <=  (an and cn and dn) or (an and c  and d )
         or (a  and bn and cn and dn);
    z   <=  (an and dn) or (a  and bn and cn and dn);

end architecture dataflow; -- of bcdxs3

Referencias

editar
  1. a b Steinbuch, Karl W.; Weber, Wolfgang (1967, reimpreso en 1974)). «Taschenbuch der Informatik - Band II - Struktur und Programmierung von EDV-Systemen». Taschenbuch der Nachrichtenverarbeitung (en alemán) 2 (3ra edición) (Springer). pp. 98-100. ISBN 3-540-06241-6. 
  2. Schmid, Hermann (1974). Decimal Computation (en inglés) (1ra edición). Nueva York, Estados Unidos: John Wiley & Sons. p. 11. ISBN 0-471-76180-X. 
  3. Schmid, Hermann (1974, reimpreso en 1983)). «Decimal Computation». Robert E. Krieger Publishing Company (en inglés) (1ra edición) (Florida, Estados Unidos). p. 11. ISBN 0-89874-318-4.  (Nótese que existen errores de impresión en la nueva edición, haciendo que la versión reimpresa tenga errores en las pp. 115-146.