以字符串表示的 2 个值的二进制加法

问题描述 投票:0回答:8

我有两根弦:

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)。

c# binary addition
8个回答
21
投票

System.Convert 应该能够为您完成这项工作

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

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

(你可能需要稍微调整琴弦)


8
投票

就像在纸上做一样。从右开始并向左移动。如果 A[i] + B[i] + 进位 >= 2,进位仍为 1,然后继续。否则,写入 A[i] + B[i] + 进位并将进位设置为 0。

a =“00001”; b =“00010”;

进位=0; a[4] + b[4] + 进位 = 1,写入 1,设置进位 = 0: 00001

a[3] + b[3] + 进位=1,写入1,设置进位=0:00011

等等。


2
投票
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;
    }

1
投票
public static string AddBinary(string a, string b)
    {
        string result = "";
         
        int s = 0;
         
        int i = a.Length - 1, j = b.Length - 1;
        while (i >= 0 || j >= 0 || s == 1)
        { 
            s += ((i >= 0) ? a[i] - '0' : 0);
            s += ((j >= 0) ? b[j] - '0' : 0);
            result = (char)(s % 2 + '0') + result;

            s /= 2;
            i--; j--;
        }
        return result;
    }

就这样。 额外链接.


0
投票

非常简单——写一个二进制字符“相加”的查找表,如果需要的话不要忘记携带,并将你工作所得的50%的功劳寄给我。


0
投票
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
投票
If a[4] + b[4] + carry = 3 then write 1, carry 1 

Else If a[4] + b[4] + carry = 2 then write 0, carry 1 

Else If a[4] + b[4] + carry = 1 then write 1, carry 0

-1
投票

我建议将数据解析为整数,然后将它们相加,然后将结果输出为二进制。

© www.soinside.com 2019 - 2024. All rights reserved.