毕业需要,哪位老兄帮忙把java代码翻译成c++ 或c#.谢谢!
public static int encode(int x, int y, int r) {    int mask = (1 << r) - 1;
    int hodd = 0;
    int heven = x ^ y;
    int notx = ~x & mask;
    int noty = ~y & mask;
    int temp = notx ^ y;    int v0 = 0, v1 = 0;
    for (int k = 1; k < r; k++) {
        v1 = ((v1 & heven) | ((v0 ^ noty) & temp)) >> 1;
        v0 = ((v0 & (v1 ^ notx)) | (~v0 & (v1 ^ noty))) >> 1;
    }
    hodd = (~v0 & (v1 ^ x)) | (v0 & (v1 ^ noty));    return interleaveBits(hodd, heven);
}//Interleave the bits from two input integer values
private static int interleaveBits(int odd, int even) {
    int val = 0;
    int n = Math.max(Integer.highestOneBit(odd), Integer.highestOneBit(even));    for (int i = 0; i < n; i++) {
        int bitMask = 1 << i;
        int a = (even & bitMask) > 0 ? (1 << (2*i)) : 0;
        int b = (odd & bitMask) > 0 ? (1 << (2*i+1)) : 0;
        val += a + b;
    }    return val;
}

解决方案 »

  1.   

    直接拷到 vs中,再改下不就得了呗,java 和c#语法非常相近
      

  2.   

    java和C++在语法上基本上都是一样,就是函数有些不太一样。
    比方说这一段要注意改一下,其他的基本都能用。
    //Math.max(Integer.highestOneBit(odd), Integer.highestOneBit(even)); 
      

  3.   

    C#:        public static int encode(int x, int y, int r)
            {
                int mask = (1 << r) - 1;
                int hodd = 0;
                int heven = x ^ y;
                int notx = ~x & mask;
                int noty = ~y & mask;
                int temp = notx ^ y;            int v0 = 0, v1 = 0;
                for (int k = 1; k < r; k++)
                {
                    v1 = ((v1 & heven) | ((v0 ^ noty) & temp)) >> 1;
                    v0 = ((v0 & (v1 ^ notx)) | (~v0 & (v1 ^ noty))) >> 1;
                }            hodd = (~v0 & (v1 ^ x)) | (v0 & (v1 ^ noty));
                return interleaveBits(hodd, heven);
            }        //Interleave the bits from two input integer values 
            private static int interleaveBits(int odd, int even)
            {
                int val = 0;
                int n = Math.Max(HighestOneBit(odd), HighestOneBit(even));            for (int i = 0; i < n; i++)
                {
                    int bitMask = 1 << i;
                    int a = (even & bitMask) > 0 ? (1 << (2 * i)) : 0;
                    int b = (odd & bitMask) > 0 ? (1 << (2 * i + 1)) : 0;
                    val += a + b;
                }
                return val;
            }        private static int HighestOneBit(int first)
            {
                string str = Convert.ToString(first, 2);
                string val = "1";
                int index = str.IndexOf(val);            if (index < 0)
                {
                    return 0;
                }            int length = str.Length - index - 1;
                for (int i = 0; i < length; i++)
                {
                    val += "0";
                }
                return Convert.ToInt32(val);
            }
      

  4.   

    #define Max(a,b) a>b?a:bint highestOneBit(int num)
    {
    int i = 2;
    while( num > i )
    {
    i*=2;
    }
    return i/2;
    }int n = Max(HighestOneBit(odd), HighestOneBit(even)); 
      

  5.   

    highestOneBit(x)   返回这个2进制数最左的那个1,将其后置0   
        
      相当于   
        
      0000   1000   ....   1111   0000     返回   0000   1000   ....   0000   0000   
      0100   1000   ....   1111   0000     返回   0100   0000   ....   0000   0000   
        
      就是某个整数将其拆分成几个2的倍数的和,取其中最大一项   
        
      200   =   128   +   64   +   ...   取128   
      1000   =   512   +   256   +   ...   取512