Hola a todos estoy asiendo un programa que ase suma de binario de 4 bits, y también suma números negativos... pero no sé cómo hacerle para que me salga el acarreo y el desbordamiento, este es el código que llevo hecho alguien podria indicarme como ponerle el acarreo y el desbordamiento
namespace _1
{
class Program
{
static void Main(string[] args)
{
int numero = 0;
int cuarto = 0, tercero = 0, segundo = 0, primero = 0;
int numero2 = 0;
int cuarto2 = 0, tercero2 = 0, segundo2 = 0, primero2 = 0;
int total4, total3, total2, total1;
Console.WriteLine("SUMA DE BINARIOS (CUATRO BITS)");
Console.WriteLine();
Console.WriteLine("Escribe los dos números a sumar: ");
Console.WriteLine();
Console.Write("");
numero = int.Parse(Console.ReadLine());
Console.Write("");
numero2 = int.Parse(Console.ReadLine());
cuarto = numero / 1000;
tercero = (numero % 1000) / 100;
segundo = ((numero % 1000) % 100) / 10;
primero = (((numero % 1000) % 100) % 10) % 10;
cuarto2 = numero2 / 1000;
tercero2 = (numero2 % 1000) / 100;
segundo2 = ((numero2 % 1000) % 100) / 10;
primero2 = (((numero2 % 1000) % 100) % 10) % 10;
if (((primero == 0) && (primero2 == 0)) || ((primero == 1) && (primero2 == 1)))
total1 = 0;
else
total1 = 1;
if (((primero == 1) && (primero2 == 1)) && ((segundo == 1) && (segundo2 == 1)))
total2 = 1;
else if (((((primero == 1) && (primero2 == 1)) && ((segundo == 1) && (segundo2 == 0))) || (((primero == 1) && (primero2 == 1)) && ((segundo == 1) && (segundo2 == 0)))) || (((segundo == 0) && (segundo2 == 0)) || ((segundo == 1) && (segundo2 == 1))))
total2 = 0;
else
total2 = 1;
if (((segundo == 1) && (segundo2 == 1)) && ((tercero == 1) && (tercero2 == 1)))
total3 = 1;
else if (((((segundo == 1) && (segundo2 == 1)) && ((tercero == 1) && (tercero2 == 0))) || (((segundo == 1) && (segundo2 == 1)) && ((tercero == 1) && (tercero2 == 0)))) || (((tercero == 0) && (tercero2 == 0)) || ((tercero == 1) && (tercero2 == 1))))
total3 = 0;
else
total3 = 1;
if (((((tercero == 1) && (tercero2 == 1)) && ((cuarto == 1) && (cuarto2 == 0))) || (((tercero == 1) && (tercero2 == 1)) && ((cuarto == 1) && (cuarto2 == 0)))) || (((cuarto == 0) && (cuarto2 == 0)) || ((cuarto == 1) && (cuarto2 == 1))))
total4 = 0;
else
total4 = 1;
Console.WriteLine();
Console.WriteLine("{0}{1}{2}{3}", total4, total3, total2, total1);
Console.ReadLine();
}
}
}
saludos encontre esto en la red talvez te pueda servir
CitarPara empezar el programa es necesario saber ciertas cosas primero:
0+0=0
0+1=1
1+1=0 y se lleva 1 (acarreo)
Lo que se pretende hacer es un programa que sume dos números binarios (de 4 bits) dados por el usuario, por lo que primero debemos solicitar los números y guardarlos en un arreglo, puedes fijar el número de bits de cada número o tambien solicitar el número de bits de los números.
Fijaremos a "n=3" por que los números binarios deben ser de 4 bits [0,3]
Usaremos a[n] y b[n] como los números binarios, res[n] como resultado y usaremos otra variable para llevar el acarreo "c=0"
El "%s" nos ayuda a guardar cada digito en una parte del arreglo
scanf("%s", a[]);
scanf("%s", b[]);
Porlo que si a=1011, a[0]=1, a[1]=0, a[2]=1, a[3]=1 y b=0111, b[0]=0, b[1]=1, b[2]=1, b[3]=1
Ahora hay que empezar a sumar donde necesitaremos 4 condiciones para llegar al resultado:
for(i=n;i>=0;i--)
{
/*empieza desde "n" para sumar desde la derecha y el decremento para ir hacia la izquierda*/
if(a+b+c=0)
{
res=0;
c=0;
/*Es importante que "c" empiece siendo cero por que al sumarlo por primera ves lo mas
probable es que tenga basura y la suma salga mal*/
}
if(a+b+c=1)
{
res=1;
c=0;
/*si la suma de a, b y c es 1 es el valor del resy pues 1 en binario es 1 por lo que el acarreo es
cero*/
}
if(a+b+c=2)
{
res=0;
c=1;
/*2 en binario = 10, por eso res=0 y llevamos 1 como acarreo*/
}
if(a+b+c=3)
{
res=1;
c=1;
/*finalmente 3 en binario = 11. Solo tenemos estas 4 condiciones por que solo estos 4
resultados podemos obtener sumando tres números (a,b,c)*/
}
}
Ya por ultimo lo que tenemos que hacer es imprimir primero el acarreo ("c") y después res[de 0 a 3],
si sumas los dos números de ejemplo notaras que el resultado es "10010" estos son 5 bits y res tiene 4, por eso se imprime primero el acarreo "c".