¿Qué cuentas como una operación? En las computadoras actuales de 64 bits, agregar dos valores de 64 bits suele ser “una operación”. Con SIMD incluso puede realizar múltiples adiciones en “una operación”.
¿Quizás te refieres a puertas lógicas? ¿Qué puertas están permitidas, solo AND / OR / NOT o NAND / NAND o NOR / NOR?
¿O cuenta funciones lógicas simples, como un medio sumador o un sumador completo?
- ¿Por qué el algoritmo de refuerzo es robusto para sobreajustar?
- ¿Cuál es la complejidad temporal del algoritmo de búsqueda binaria?
- ¿Cuándo debería mirar la solución de algún problema algorítmico?
- Si cada solución recursiva se puede transformar en una iterativa, ¿por qué usar la recursividad?
- ¿Cuál es el mejor algoritmo para encontrar la ruta más corta en un gráfico orientado, donde algunos bordes están bloqueados y las teclas están en algún lugar de los nodos?
¿Es la función una función de salida única, calculando solo un bit, o puede calcular una suma parcial (para un bit en una posición) y el acarreo resultante (0 o 1)? Eso haría de esta una función de salida múltiple con dos salidas.
De todos modos, hasta donde yo sé, la forma más eficiente de agregar números en términos de número mínimo de puertas y entradas es el método anticuado de transferencia de onda. Casi como aprendiste en la escuela primaria, pero solo con los dígitos binarios 0 y 1:
Comience en el lado derecho, agregue los bits menos significativos. Obtendrá un bit de resultado y un bit de acarreo para la siguiente etapa. Por lo tanto, necesitará n-1 sumadores completos y 1 medio sumador para los bits menos significativos. Luego, para la última etapa, tal vez no necesite calcular un acarreo, dependiendo de cómo planee usar el circuito sumador. ¿Necesita algún tipo de señalización de desbordamiento?
Restando:
A menudo, la primera etapa (para los bits 0) también es un sumador completo, por lo que puede aceptar un arrastre. De esta manera, se puede usar el mismo circuito para la resta, que en el complemento 2 no es más que agregar el complemento 1 (todos los bits del segundo operando se voltearon) y agregar 1. (Es posible que necesite lógica adicional para invertir todos los bits del 2º operando).
Esto tiene que ver con la aritmética del módulo 2. El circuito no puede ver la diferencia entre (ab) y (ab) + k * 2 ^ n, donde n es el número de bits de un operando yk algún entero, ya que el resultado se “ajustará”.
Tomemos un ejemplo muy simple. Suponga que n = 4.
Ahora vamos a calcular 0 (decimal) – 0 (decimal) con la receta que di arriba:
0000 – 0000 = 0000 + 1111 + 1 = 1111 + 1 = (1) 0000.
Para restar cero tenemos que sumar el complemento de 1: 1111. Pero sabemos que la respuesta debe ser 0000. Entonces, ¿cómo obtenemos esto? Al agregar un extra 1. Si agrega eso hasta 1111, comenzando por la derecha, verá 1 + 1 = 10 (binario). Entonces la suma es 0 y el carry es 1 en cada etapa. Terminarás con 4 ceros (el resultado correcto) y un carry, que no se usa y se pierde. Por cierto, esto no es una prueba de que la receta de tomar el complemento 1-s y agregar 1 siempre funciona. Es solo una simple ilustración de que funciona en este caso particular.