毕业需要,哪位老兄帮忙把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;
}
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;
}
比方说这一段要注意改一下,其他的基本都能用。
//Math.max(Integer.highestOneBit(odd), Integer.highestOneBit(even));
{
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);
}
{
int i = 2;
while( num > i )
{
i*=2;
}
return i/2;
}int n = Max(HighestOneBit(odd), HighestOneBit(even));
相当于
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