vendredi 1 février 2019

Where does the problem lie within my code such that the carry and result arrays are giving me the wrong answer when performing a binary addition?

Disclaimer - First of all my apologies if I have missed anything or didn't format something right, I am new to this platform and willt ake constructive criticism but please dont downvote me. I also understand that this code looks very bad and may frustrate some users but I am trying to get the basics down with C# before I move on to the likes of 2D arrays to code things like this.

The Problem -

When iterating through the if statements, the carry and result arrays don't give me the right answer for Binary Addition. How do I change them so that they give me the right answer?

This is for a binary calculator program

All arrays are set to the same length which is determined by user input eg.

Console.WriteLine("How many bits would you like to use?");
           int arrayLengths = int.Parse(Console.ReadLine());
           // all arrays lengths are set to = new int[arrayLengths];

-

for (int i = firstBinaryNumber.Length - 1; i > 0; i--)
{
     if (firstBinaryNumber[i] == 0 && secondBinaryNumber[i] == 0 && carry[i] == 0)
     {
          carry[i - 1] = 0;
          result[i] = 0;
     }

     if (firstBinaryNumber[i] == 0 && secondBinaryNumber[i] == 0 && carry[i] == 1)
     {
          carry[i - 1] = 0;
          result[i] = 1;
     }

     if (firstBinaryNumber[i] == 0 && secondBinaryNumber[i] == 1 && carry[i] == 0)
    {
        carry[i - 1] = 0;
        result[i] = 1;
    }

    if (firstBinaryNumber[i] == 0 && secondBinaryNumber[i] == 1 && carry[i] == 1)
    {
        carry[i - 1] = 1;
        result[i] = 0;
    }

    if (firstBinaryNumber[i] == 1 && secondBinaryNumber[i] == 0 && carry[i] == 0)
    {
        carry[i - 1] = 0;
        result[i] = 1;
    }

    if (firstBinaryNumber[i] == 1 && secondBinaryNumber[i] == 0 && carry[i] == 1)
    {
        carry[i - 1] = 1;
        result[i] = 0;
    }

    if (firstBinaryNumber[i] == 0 && secondBinaryNumber[i] == 1 && carry[i] == 0)
    {
        carry[i - 1] = 0;
        result[i] = 1;
    }

    if (firstBinaryNumber[i] == 1 && secondBinaryNumber[i] == 1 && carry[i] == 0)
    {
        carry[i - 1] = 1;
        result[i] = 0;
    }

    if (firstBinaryNumber[i] == 1 && secondBinaryNumber[i] == 1 && carry[i] == 1)
    {
        carry[i - 1] = 1;
        result[i] = 1;
    }
}

The results I would expect, for example, can be summarised by this -

firstBinaryNumber = 101

secondBinaryNumber = 001

therefore

carry = 010

result = 110

However my actual results look like this -

firstBinaryNumber = 101

secondBinaryNumber = 001

carry = 000

carry = 100

Aucun commentaire:

Enregistrer un commentaire