La sustracción binaria generalmente se implementa utilizando la suma binaria y la negación.
Es inusual realizar tres o más operaciones simultáneamente (aparte de multiplicar sumar, también conocido como multiplicar acumular, o MAC).
Por lo tanto, A-B-C
, generalmente se implementa como A+(-B)+(-C)
donde -
es menos negativo o negación.
Esto se ajusta a muchos operandos y subprendes.
A-B-C-D+E-F-G
se convierte en A+(-B)+(-C)+(-D)+E+(-F)+(-G)
. La adición, la operación '+' es conmutativa, por lo que se puede evaluar en cualquier orden (ignorando el desbordamiento) y con muchos operandos arbitrarios.
¿Cómo podríamos operar en \ $ 47-15 + 23-11 + 16-22 + 12 \ $?
Un enfoque podría ser \ $ 47 + 23 + 16 + 12- (15 + 11 + 22) \ $, pero ¿cuánto hardware podría ser necesario para implementar eso?
Claramente, una solución ingeniosa es \ $ 47 + (16-15) + (23-22) + (16-15) = 50 \ $, pero ¿y qué? ¿Cuánto hardware o VHDL y lógica programable tomaría reconocer eso? Cuando sabemos por adelantado la secuencia de operaciones, las optimizaciones pueden tener sentido.
Usando la representación del complemento de 1, el bit más a la derecha, 'arriba' representa el signo, con '1' que indica un número negativo. Entonces, para negar un número, "invierte" su bit superior para que sea el otro valor. Un problema con la representación del complemento de 1 es que son dos cero, una positiva (bit superior 0) y una negativa (bit superior 1), lo que hace que algunas operaciones sean más complejas.
La mayoría de las computadoras usa la representación de 2 del complemento de números binarios. El bit superior aún indica el signo ('0' para positivo y '1' para negativo) como en el complemento de 1. Sin embargo, los valores se representan de una manera ligeramente diferente.
El proceso se describe en Complemento de Wikipedia Two
Para restar un número, conviértalo a la forma de complemento de sus dos y luego agregue. Esto es un poco raro, pero no es tan malo de implementar.
Este enfoque tiene varias propiedades útiles:
- solo hay una representación de cero, y por lo tanto
- comparar un número con cero es más simple que el complemento de 1
- una vez que el número se convierte a su complemento, la suma es
Conmutativo ,
se puede hacer es cualquier orden
Editar:
Una forma eficiente de implementar la resta al calcular el complemento de 2 sumando es:
-
invierta cada bit del sustraendo. Cuesta una puerta NO por bit. los
la operación de inversión tiene un retardo de propagación bastante bajo, entonces
-
agregue usando N-bit-addder con un '1' en el bit inferior. los
carry-in implementa el segundo paso complementario 2 de +1.
Entonces, el costo extra total de la resta es N NOT-gates, y el bit más bajo de N-bit-add es un sumador completo en lugar de un medio sumador (que es la forma clásica de enseñar esto), y por lo tanto es Un extra de tres puertas.
Una propiedad útil de restringir las operaciones a dos operandos a la vez es que funciona para todos los casos y es relativamente fácil de analizar, y aplica reglas de precedencia aritméticas 'diarias' (multiplicar antes de sumar), asociatividad (de izquierda a derecha) y conmutatividad (A + B = B + A, pero AB ≠ BA).