我有两个字符串:
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)。
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] + carry >= 2,carry 仍然是 1,然后你继续。否则,写入 A[i] + B[i] + 进位并将进位设置为 0。
一个=“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;
}
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;
}
只是它。额外链接。
非常简单——为二进制字符的“加法”编写一个查找表,必要时不要忘记携带,并将你为这项工作获得的 50% 的功劳寄给我。
我建议将数据解析为整数,然后添加它们,然后将结果输出为二进制。
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”