Esta es una simulación de software de un dispositivo de hardware llamado “medio sumador”, o más exactamente, una matriz de medios sumadores tan anchos como las variables de entrada. Ahora que conoce el término, busque en Google “medio sumador” y mire los circuitos y las tablas de verdad que encontrará.
La expresión “a ^ b”, donde el cursor es en realidad el operador XOR bit a bit, calcula el nuevo valor de bit de salida en esta posición particular en la palabra binaria. (XOR es idéntico a la adición modular de base-2). La expresión “a & b” es una operación AND a nivel de bit, que calcula la salida de acarreo de la suma en cada posición de bit. Luego, la parte “<< 1" desplaza todos los bits de acarreo 1 posición hacia la izquierda (multiplicándolos efectivamente por 2), dándoles el valor numérico correcto.
Entonces, la entrada es dos números binarios arbitrarios. El cálculo en la línea 3 genera dos nuevos números binarios cuya suma es la misma que las dos entradas. Pero es probable que el segundo valor (los bits de acarreo) tenga más ceros que unos en él. Como la función se llama a sí misma de forma recursiva, los bits de acarreo “1” se desplazan hacia la izquierda hasta que encuentran un lugar donde se pueden agregar, mientras que hay una cadena de bits “0” a la derecha del valor “b”. Una vez que tiene una cadena ininterrumpida de ceros en “b” que comienza desde el extremo derecho, esos ceros nunca pueden cambiar a unos, y por lo tanto la porción inferior de la misma longitud de “a” tampoco puede cambiar más.
Finalmente, la entrada “b” debe convertirse en cero y la recursión se detiene. Debido a que la suma de “a” y “b” es constante para cada llamada, y “b” ahora es cero, “a” solo es la suma de las dos entradas.
- ¿Cuál es el mejor libro para la programación de Arduino?
- ¿Cuáles son algunos libros que ayudarán a un principiante de CFD que busca hacer algunas codificaciones básicas, incluyendo FVM, FEM y BEM en lenguajes de programación como Matlab, C ++ y Fortran (preferido pero no limitado a)?
- Quiero aprender C ++ para hacer un juego, pero soy un principiante. ¿Cuáles son los mejores libros de C ++ de 2014 o quizás incluso de 2015?
- ¿Qué libros me recomiendan las personas que trabajan como desarrolladores para mejorar mis habilidades?
- Programación por computadora: ¿Cuál es el mejor tutorial o libro para aprender punteros?
Nota: este no es un sumador de transferencia de ondas, que solo agrega un bit a la vez, y toma N ciclos para agregar N bits, incluso si no hay acarreos. Este sumador agrega todos los bits en paralelo, y se puede hacer en un solo ciclo si todos los bits de acarreo son cero. Por lo general, tomará algunos ciclos más para terminar de propagar los acarreos. El peor de los casos sigue siendo N ciclos, pero eso solo sucede para un posible par de entrada (creo).
Dave