Solución:
Bueno, es un problema bastante trivial.
Cómo sumar dos números binarios en c ++. cuál es la lógica de esto.
Para sumar dos números binarios, ay b. Puede utilizar las siguientes ecuaciones para hacerlo.
suma = a xor b
llevar = ab
Esta es la ecuación para un Half Adder.
Ahora, para implementar esto, es posible que deba comprender cómo funciona un sumador completo.
suma = a xor b xor c
llevar = ab + bc + ca
Dado que almacena sus números binarios en una matriz int, es posible que desee comprender la operación bit a bit. Puede utilizar ^ para XOR, | operador para OR y operador para AND.
Aquí hay un código de muestra para calcular la suma.
for(i = 0; i < 8 ; i++){
sum[i] = ((a[i] ^ b[i]) ^ c); // c is carry
c = ((a[i] & b[i]) | (a[i] & c)) | (b[i] & c);
}
Como preguntaba sobre C ++, se merece una respuesta de C ++. Utilice conjuntos de bits:
#include <bitset>
#include <iostream>
int main() {
std::bitset<5> const a("1001");
std::bitset<5> const b("1111");
std::bitset<5> const m("1");
std::bitset<5> result;
for (auto i = 0; i < result.size(); ++i) {
std::bitset<5> const diff(((a >> i)&m).to_ullong() + ((b >> i)&m).to_ullong() + (result >> i).to_ullong());
result ^= (diff ^ (result >> i)) << i;
}
std::cout << result << std::endl;
}
Esto funciona para conjuntos de bits arbitrariamente largos.
Hay un error:
if(a[i]+b[i]+carry==1)
{
result[i]=1;
carry=0;
}
También es posible que desee imprimir al revés
for(int j=6; j>=0; j--)
{
cout<<result[j]<<" ";
}