Двоичное добавление 2 значений, представленных в виде строк - PullRequest
6 голосов
/ 12 февраля 2010

У меня есть две строки:

string a = "00001"; /* which is decimal 1 I've converted with next string:
string a = Convert.ToString(2, 2).PadLeft(5, '0'); */
string b = "00010";

Я хочу выполнить двоичное сложение между двумя, поэтому ответ будет 00011 (3).

Ответы [ 6 ]

13 голосов
/ 12 февраля 2010

System.Convert должен быть в состоянии сделать всю работу за вас

int number_one = Convert.ToInt32(a, 2);
int number_two = Convert.ToInt32(b, 2);

return Convert.ToString(number_one + number_two, 2);

(возможно, вам придется немного настроить струны)

5 голосов
/ 12 февраля 2010

Вы делаете это так же, как вы делаете это на бумаге. Начните справа и двигайтесь влево. если A [i] + B [i] + carry> = 2, перенос остается 1, и вы продолжаете. В противном случае напишите A [i] + B [i] + carry и установите для переноса значение 0.

a = "00001"; b = "00010";

carry = 0; a [4] + b [4] + carry = 1, запись 1, set carry = 0: 00001

a [3] + b [3] + carry = 1, запись 1, set carry = 0: 00011

и т. Д.

2 голосов
/ 26 сентября 2011
private static bool[] BinaryAdd(bool[] originalbits, long valuetoadd)
    {
        bool[] returnbits = new bool[originalbits.Length];

        for (long i = 0; i <= valuetoadd - 1; i++)
        {
            bool r = false; //r=0
            for (long j=originalbits.Length-1;j<=originalbits.Length;j--)
            {
                bool breakcond = false;
                bool o1 = originalbits[j];
                if (r == false)
                {
                    if (o1 == false) { o1 = true; breakcond = true; }//break
                    else if (o1 == true) { o1 = false; r = true; }
                }
                else
                {
                    if (o1 == false) { o1 = true; breakcond = true; }//break
                    else if (o1 == true) { o1 = false; r = true; }
                }

                originalbits[j] = o1;
                if (breakcond == true)
                {
                    break;
                }
            }

        }
        returnbits = originalbits;

        return returnbits;
    }
0 голосов
/ 01 июня 2018
var sum = Convert.ToString(Convert.ToInt32("00010", 2) + Convert.ToInt32("00001", 2), 2).PadLeft(5, '0');

"00011"

PadLeft на самом деле не нужен, но если бы строки имели разную длину, вы бы получили тот же формат. Пример:

var sum = Convert.ToString(Convert.ToInt32("0000010", 2) + Convert.ToInt32("001", 2), 2).PadLeft(5, '0');

"00011"

0 голосов
/ 12 февраля 2010

Я бы порекомендовал разобрать данные в целые, затем добавить их, а затем вывести результат в двоичном виде.

0 голосов
/ 12 февраля 2010

Очень просто - напишите таблицу поиска для «добавления» двоичных символов, не забудьте взять с собой при необходимости и пришлите мне 50% кредита, который вы получаете за работу.

...