Supongamos que se nos permite convertir en binario y también se permiten operaciones lógicas.
Profundizando en lo básico (Ignorar si ya lo sabe)
Considere esto para un número binario de un solo bit
0 + 0 = 0 (Llevar = 0)
0 + 1 = 1 (C = 0)
1 + 0 = 1 (C = 0)
1 + 1 = 0 (C = 1)
- ¿Hay algún factorial grande conocido que pueda representarse como una expresión razonablemente pequeña usando solo la suma, resta, multiplicación, división y exponenciación de enteros?
- Cómo demostrar que una función puede expresarse como una suma de series de potencia cercanas a 0
- ¿Cuál es la diferencia entre la teoría de números y el análisis numérico?
- Cómo encontrar la suma de n términos de la serie 0.7 + 7.7 + 0.77 + 77.7 + 0.777 + 777.7 + 0.7777 +…
- ¿Cómo se pueden escribir algoritmos de cálculo de precisión arbitraria para aplicaciones de teoría de números?
Entonces uno puede observar
Suma = Xor de operandos (bitor Xor ^)
Llevar es Y de operandos (bit a bit y &)
[Esto es básicamente Half Adder si no lo sabías]
Extendiendo este concepto a n bits ahora.
[Tenga en cuenta: sumador completo ]
pero antes de eso, déjame mostrarte la lógica en la base 10:
Supongamos que quiere agregar 143 + 147 decir
143
+147
——–
280 (sin los acarreos)
ahora los bits de acarreo: 010
agrégalos 280
+0010
———–
0290 (nuestra respuesta)
de manera similar en la base 2
5 -> 101
+
4 -> 100
—————-
9 001 (sin acarreos)
1000 (llevar bits)
————-
1001 (9)
Esta adición de bits de transporte final se puede lograr con simples desplazamientos a la izquierda.
(Si aún no está claro, piense
1
+
1
–
0 sin llevar
c bit = 1
desplazamiento a la izquierda una vez
10
no quedan más pedazos
)
Implementación en C
#include
int Agregar (int x, int y)
{
// Iterar hasta que no haya carry
mientras que (y! = 0)
{
// carry ahora contiene bits de conjunto comunes de x e y
int carry = x & y;
// Suma de bits de x e y donde al menos uno de los bits no está establecido
x = x ^ y;
// Carry se desplaza por uno para que al agregarlo a x se obtenga la suma requerida
y = llevar << 1;
}
volver x;
}
int main ()
{
printf (“% d”, Agregar (15, 32));
devuelve 0;
}
Puede visitar esto para ver la implementación recursiva también.
Agregue dos números sin usar operadores aritméticos – GeeksforGeeks
Espero que te haya ayudado. Feliz codificación 🙂