私は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)になります。
System.Convert はあなたのために仕事をすることができるはずです
int number_one = Convert.ToInt32(a, 2);
int number_two = Convert.ToInt32(b, 2);
return Convert.ToString(number_one + number_two, 2);
(弦を少し調整する必要があるかもしれません)
紙の上で行うのと同じように行います。右から始めて左に移動します。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
等々。
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;
}
非常に簡単です。2進文字の「加算」用のルックアップテーブルを作成し、必要に応じて持ち歩くことを忘れないでください。作業で得たクレジットの50%を送ってください。
データをintに解析してから追加し、結果をバイナリとして出力することをお勧めします。