# Exceso-3

El código binario Exceso-3, o 3-exceso (normalmente abreviado como XS-3 o X3) o código Stibitz (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

Los códigos parciales son una forma de representar valores con un número balanceado de positivos y negativos utilizando un número preespecificado $N$ 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 $(0-$exceso$).$
* El número binario más grande representa al valor más grande $(2^{N+1}-$exceso$-1).$
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 $(0100,0101,1010).$
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

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

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