分段做異或,59.32.0.0 和59.42.255.255,分別作 59 XOR 59,32 XOR 42, 0 XOR 255, 0 XOR 255,得到的是位異或后的十進制數字,然後轉化為二進制再拼接起來,數一數第一個1的位置就行了。

解决方案 »

  1.   

    我其实是要在程序中实现计算子网掩码的功能。输出3dns设备的配置文件。
      

  2.   

    string ip1 = "59.32.0.0";
    string ip2 = "59.42.255.255";
    string[] px1 = ip1.Split('.');
    string[] px2 = ip2.Split('.');

    string strR = "";
    for (int i = 0; i < 4; i++) 
    {
    int n1, n2;
    n1 = int.Parse(px1[i]);
    n2 = int.Parse(px2[i]);
    strR += Convert.ToString(n1 ^ n2) + ".";
    }

    MessageBox.Show(strR);
      

  3.   

    不知道位数是怎么算的……我按每段固定转8位,没用系统自带的运算符,写了一个人工一位一位检查的,返回值从1~32                           string A="59.32.0.0";
                               string B="59.42.255.255"; int P=-1; for(int i=0;i<4;i++)
    {
                                        if(P!=-1) break; string a=A.Split('.')[i].ToString();
    string b=B.Split('.')[i].ToString(); a=Convert.ToInt32(Convert.ToString(Convert.ToInt32(a),2)).ToString("00000000");
    b=Convert.ToInt32(Convert.ToString(Convert.ToInt32(b),2)).ToString("00000000"); for(int j=0;j<8;j++)
    {
    if(Convert.ToInt32(a[j].ToString())+Convert.ToInt32(b[j].ToString())==1 )
    {
    P=i*8+j+1;
    break;
    }
    }
    } MessageBox.Show("从左边起为1的最高位:"+P.ToString());