¿Cómo podemos encontrar la suma de dos números sin usar ningún operador aritmético o uninario en C / C ++?

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)

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 🙂

Aquí hay un fragmento que funcionará.

int add (int x, int y)
{
return printf (“% * c% * c”, x, ‘\ r’, y, ‘\ r’);
}

int main ()
{
printf (“Suma =% d”, suma (3, 4));
devuelve 0;
}

Como ya sabrá, el valor de retorno de printf () es el número de caracteres escritos con éxito en la salida.
Además, utilizando un poco de conocimiento de los especificadores de formato de cadena, observará que el código anterior funcionará.

Consulte el siguiente enlace para más detalles.
Para encontrar la suma de dos números sin usar ningún operador – GeeksforGeeks

Otra solución a este problema en Java,

El enfoque para resolver este problema es: –

– Si agrega dos números binarios juntos pero se olvida de llevar, el bit [i] será 0 si el bit [i] en a y b son ambos 0 o ambos 1. Esto es un XOR.

– Si agrega dos números juntos pero solo lleva, tendrá un 1 en el bit [i] si el bit [i-1] en a y b son ambos de 1. Esto es un AND, desplazado.

– Ahora, recurse hasta que no haya nada que cargar.

Para la solución, consulte este enlace Escriba un programa que agregue dos números. No debe usar + ni ningún operador aritmético.

¿Cómo agrego dos números sin usar ningún operador C / C ++?

#include

int main () {

int a = 5, b = 10;

printf (“% d”, printf (“% * c% * c”, a, “”, b, “”));

devuelve 0;

}

La salida de este programa será de 15 espacios seguidos del número 15 :

“_______________15” (visualice el “_” como espacios)

Los primeros 15 espacios cambian según el compilador, tal vez espacios, o tal vez un carácter ASCII aleatorio, pero la respuesta impresa al final será la suma de esos dos números dados (a y b.

Esto puede dar algunas advertencias en muchos compiladores, pero el programa se ejecutará y obtendrá el resultado.

Esta es una captura de pantalla del resultado ejecutado que obtuve de varios compiladores en línea.

Este es un método para imprimir la suma de 2 enteros, sin usar ningún operador aritmético o lógico.