首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C# 怎么实现这样的二进制运算

2013-10-13 
C# 如何实现这样的二进制运算?请问C#如何实现下面这样的二进制运算?(两个二进制数存储在字符串里)string N

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硬件电路实现的。

你所谓的“直接计算”,相当于软件模拟计算机二进制计算,反而更慢。

热点排行