C# 如何实现这样的二进制运算?
请问C#如何实现下面这样的二进制运算?(两个二进制数存储在字符串里)
string Num1 = "10";
string Num2 = "10";
结果:"100"
除了把Num1和Num1转换为十进制,算完=4,再转换成100,还有没有更直接一点的方法?
比如:
"10"→二进制的10,
二进制原理相加得100?
二进制
[解决办法]
这就够直接的了
[解决办法]
int sum = Convert.ToInt32(Num1, 2) + Convert.ToInt32(Num2, 2);
string b = Convert.ToString(sum, 2);
[解决办法]
可以不需要转换成十进制,那就按照二进制的按位加啊,逢2进1的思路就可以啊
[解决办法]
计算机内部本来就是二进制运算的,你这样目的何在?怪电脑不懂二进制,非要手动实现?
[解决办法]
如果你需要处理 BIG INTEGER,那么就自己写一个类对其进行处理,对字符串的每一个位自己计算,还要注意进位。字符串还得判断合法性。加减乘除都得实现。等等
[解决办法]
写了一个加法的,看看如何处理的,然后再自己试着写其他的,只能帮你到这了。。。
static string BinaryStrAdd(string str1, string str2)
{
// Ignore Validation...
string result = string.Empty;
int len = 0;
char[] ch1 = str1.Reverse().ToArray();
char[] ch2 = str2.Reverse().ToArray();
len = ch1.Length > ch2.Length ? ch1.Length : ch2.Length;
byte[] b1 = new byte[len];
byte[] b2 = new byte[len];
byte[] b3 = new byte[len + 1];
for (int i = 0; i < ch1.Length; i++)
{
b1[i] = Convert.ToByte(ch1[i].ToString());
}
for (int i = 0; i < ch2.Length; i++)
{
b2[i] = Convert.ToByte(ch2[i].ToString());
}
byte carry = 0;
for (int i = 0; i < len; i++)
{
if (i != 0)
{
if (carry == 1)
{
b3[i] = (byte)(b1[i] + b2[i] + carry);
}
else
{
b3[i] = (byte)(b1[i] + b2[i]);
}
}
else
{
b3[i] = (byte)(b1[i] + b2[i]);
}
if (b3[i] == 2)
{
b3[i] = 0;
carry = 1;
}
else if (b3[i] == 3)
{
b3[i] = 1;
carry = 1;
}
else
{
carry = 0;
}
}
if (carry == 1)
{
b3[len] = 1;
}
StringBuilder sb = new StringBuilder();
for (int i = b3.Length - 1; i >= 0; i--)
{
sb.Append(b3[i]);
}
result = sb.ToString();
return result;
}
[解决办法]
int sum = Convert.ToInt32(Num1, 2) + Convert.ToInt32(Num2, 2);
string b = Convert.ToString(sum, 2);
[解决办法]
转换以后计算是最快的了。
因为加法、进位全部都是CPU硬件电路实现的。
你所谓的“直接计算”,相当于软件模拟计算机二进制计算,反而更慢。