Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: shamankaly en 13 Mayo 2009, 04:49 am



Título: Programa suma de binarios
Publicado por: shamankaly en 13 Mayo 2009, 04:49 am

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();



        }
    }
}




Título: Re: Programa suma de binarios
Publicado por: <sylar> en 13 Mayo 2009, 07:13 am
saludos encontre esto en la red talvez te pueda servir

Citar
Para 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".