separadores - Agregar números binarios en C++
programacion decimal a binario (11)
¿Cómo agregaría dos números binarios en C ++? ¿Cuál es la lógica correcta?
Aquí está mi esfuerzo, pero no parece ser correcto:
#include <iostream>
using namespace std;
int main()
{
int a[3];
int b[3];
int carry = 0;
int result[7];
a[0] = 1;
a[1] = 0;
a[2] = 0;
a[3] = 1;
b[0] = 1;
b[1] = 1;
b[2] = 1;
b[3] = 1;
for(int i = 0; i <= 3; i++)
{
if(a[i] + b[i] + carry == 0)
{
result[i] = 0;
carry = 0;
}
if(a[i] + b[i] + carry == 1)
{
result[i] = 0;
carry = 0;
}
if(a[i] + b[i] + carry == 2)
{
result[i] = 0;
carry = 1;
}
if(a[i] + b[i] + carry > 2)
{
result[i] = 1;
carry = 1;
}
}
for(int j = 0; j <= 7; j++)
{
cout<<result[j]<<" ";
}
system("pause");
}
Como preguntabas por C ++, mereces una respuesta en C ++. Usa bitsets :
#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.
Los siguientes fueron los errores en su código y el código fijo también está debajo "
- int a [] era de tamaño 3, por lo que no se puede almacenar en el tercer índice. use int a [4].
- if (a [i] + b [i] + carry == 1) se asignaron valores incorrectos en este resultado de actualización de comprobación [i] = 1; carry = 0.
- La secuencia de controles se invierte.
- El último acarreo no se almacenó en el resultado.
- El resultado de la adición almacenado en la matriz de resultados estaba en orden inverso, así que se imprimió en reversa.
aquí está la pieza de código de trabajo:
#include <iostream>
#include <string>
using namespace std;
int main()
{
int a[4];
int b[4];
int carry=0;
int result[5];
a[0]=1;
a[1]=0;
a[2]=0;
a[3]=1;
b[0]=1;
b[1]=1;
b[2]=1;
b[3]=1;
for(int i=0; i<4; i++)
{
if(a[i]+b[i]+carry==3)
{
result[i]=1;
carry=1;
}
if(a[i]+b[i]+carry==2)
{
result[i]=0;
carry=1;
}
if(a[i]+b[i]+carry==1)
{
result[i]=1;
carry=0;
}
if(a[i]+b[i]+carry==0)
{
result[i]=0;
carry=0;
}
}
result[4]=carry;
for(int j=4; j>=0; j--)
{
cout<<result[j];
}
cout<<endl;
return 0;
}
Podría usar la operación "Bitwise OR" para reducir el código desde
1 or 1 = 1
1 or 0 = 1
0 or 1 = 1
0 or 0 = 0
También puede convertir ambos números a la suma decimal y volver a los binarios nuevamente.
Conversión de decimal a binario
int toBinary (unsigned int num, char b[32])
{
unsigned int x = INT_MIN; // (32bits)
int i = 0, count = 0;
while (x != 0)
{
if(x & num) // If the actual o bit is 1 & 1 = 1 otherwise = 0
{
b[i] = ''1'';
count++;
}
else b[i] = ''0'';
x >>=1; // pass to the left
i++;
}
return count;
}
Repetidamente hacer
(x, y) <- ((x & y) << 1, x ^ y)
hasta que x es 0. y es la respuesta.
Sus matrices son un elemento demasiado pequeño para su indexación.
int a[3]
solo tiene 3 elementos, por lo que a[3] = 1
no es válido (tiene un comportamiento indefinido ) ya que está accediendo al 4º elemento, que no existe.
Del mismo modo para las otras matrices.
Eso significa que todo el programa tiene un comportamiento indefinido, es decir, puede hacer cualquier cosa o nada en absoluto.
(Lo que probablemente está sucediendo en su caso es que escribir fuera de las matrices está sobrescribiendo las otras variables).
Tampoco estás inicializando la matriz de result
, por lo que su contenido es solo algunos datos aleatorios.
Como solo actualiza 4 de sus elementos pero imprime todos (y más), la salida también será aleatoria.
Bueno, es un problema bastante trivial.
Cómo agregar dos números binarios en c ++. cual es la lógica de eso
Para agregar dos números binarios, a y b. Puede usar las siguientes ecuaciones para hacerlo.
sum = a xor b
llevar = ab
Esta es la ecuación de Half Adder .
Ahora, para implementar esto, es posible que necesites entender cómo funciona un Adherente Completo .
sum = a xor b xor c
carry = ab + bc + ca
Dado que almacena sus números binarios en la matriz int, es posible que desee comprender el funcionamiento en modo bit . Puede usar ^ para XOR, | operador para O, 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);
}
#include <stdio.h>
int main()
{
long binary1, binary2;
int i = 0, remainder = 0, sum[20];
printf("Enter the first binary number: ");
scanf("%ld", &binary1);
printf("Enter the second binary number: ");
scanf("%ld", &binary2);
while (binary1 != 0 || binary2 != 0)
{
sum[i++] =(binary1 % 10 + binary2 % 10 + remainder) % 2;
remainder =(binary1 % 10 + binary2 % 10 + remainder) / 2;
binary1 = binary1 / 10;
binary2 = binary2 / 10;
}
if (remainder != 0)
sum[i++] = remainder;
--i;
printf("Sum of two binary numbers: ");
while (i >= 0)
printf("%d", sum[i--]);
getch();
return 0;
}
Hay un error:
if(a[i]+b[i]+carry==1)
{
result[i]=1;
carry=0;
}
También es posible que desee imprimir en reversa
for(int j=6; j>=0; j--)
{
cout<<result[j]<<" ";
}
usted debe hacer esto
for(int i = 3; i >= 0; i--)
{
if(a[i] + b[i] + carry == 0)
{
result[i] = 0;
carry = 0;
}
else if(a[i]+b[i]+carry==1)
{
result[i]=1;
carry=0;
}
else if(a[i] + b[i] + carry == 2)
{
result[i] = 0;
carry = 1;
}
else if(a[i] + b[i] + carry > 2)
{
result[i] = 1;
carry = 1;
}
printf("%d",result[i]);
}
Una solución no convencional, pero funciona:
int main() {
int A[] = { 0, 0, 0, 1, 1, 0, 1, 0};
int B[] = { 0, 0, 0, 0, 1, 1, 0, 0};
int size = sizeof(A)/sizeof(*A);
int C[size+1];
int t = 0;
for(int i = size-1; i > -1; i--){
C[i+1] = A[i]+B[i]+t;
t = C[i+1]/2;
C[i+1] %= 2;
}
C[0] = t;
}
¿Qué pasa si sus tamaños no son los mismos? Además, le gustaría permitir que el usuario ingrese los números binarios (en este caso, representando enteros) como enteros y no como elementos de matrices. Aquí hay una pieza de código que logra esos :-)
#include <iostream>
using namespace std;
// Add two numbers in binary
void sumBinary(int num1, int num2, int* sum12){
int mod1 = 0;
int mod2 = 0;
int carry = 0;
int factor = 1;
int flag = 0;
*sum12 = 0;
while (!flag){
mod1 = num1 % 10;
mod2 = num2 % 10;
num1 /= 10;
num2 /= 10;
if ((carry + mod1 + mod2) == 2){
*sum12 += 0;
carry = 1;
}
else if ((carry + mod1 + mod2) == 3){
*sum12 += factor;
carry = 1;
}
else if ((carry + mod1 + mod2) == 0){
*sum12 += 0;
carry = 0;
}
else{
*sum12 += factor;
carry = 0;
}
factor *= 10;
if ((num1 == 0) && (num2 == 0)){
*sum12 += carry*factor;
flag = 1; }
}
}
void main(){
int num1, num2, sum12;
cout << "Enter the first binary integer number: ";
cin >> num1;
cout << "Enter the second binary integer number: ";
cin >> num2;
sumBinary(num1, num2, &sum12);
cout << "The sum in binary form is :" << sum12 << endl;
}