8

私は2つの文字列を持っています:

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";

2つの間に2進加算を実行したいので、答えは00011(3)になります。

4

7 に答える 7

19

System.Convert はあなたのために仕事をすることができるはずです

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

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

(弦を少し調整する必要があるかもしれません)

于 2010-02-12T15:37:17.647 に答える
5

紙の上で行うのと同じように行います。右から始めて左に移動します。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

等々。

于 2010-02-12T15:30:06.867 に答える
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;
    }
于 2011-09-26T13:45:40.473 に答える
0

非常に簡単です。2進文字の「加算」用のルックアップテーブルを作成し、必要に応じて持ち歩くことを忘れないでください。作業で得たクレジットの50%を送ってください。

于 2010-02-12T15:30:12.997 に答える
0

データをintに解析してから追加し、結果をバイナリとして出力することをお勧めします。

于 2010-02-12T15:30:38.180 に答える