Exceso-3
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
editarLos 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
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
editarLa 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
editarConvertidor 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- ↑ 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.
- ↑ 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.
- ↑ 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.