我试图将java代码转换为c#代码。我收到了这个错误
运营商>>不能应用于char和long类型的操作数。
代码是:
static int getPruningP(byte[] table, long index, long THRESHOLD)
{
if (index < THRESHOLD)
{
return tri2bin[table[(int)(index >> 2)] & 0xff] >> ((index & 3) << 1) & 3;
}
else {
return tri2bin[table[(int)(index - THRESHOLD)] & 0xff] >> 8 & 3;
}
}
答案 0 :(得分:1)
在执行按位和之前,您需要将long
参数强制转换为int
。
使用
return tri2bin[table[(int)(index >> 2)] & 0xff] >> (((int)index & 3) << 1 ) & 3;
而不是
return tri2bin[table[(int)(index >> 2)] & 0xff] >> ((index & 3) << 1) & 3;
因此,您需要匹配&amp;的匹配类型。运算符,目前执行long & int
。
答案 1 :(得分:0)
实际上,它与'&amp;'无关或移位运算符 - 函数返回'int'并且return语句的结果为'long',因此您需要转换返回值:
static int getPruningP(byte[] table, long index, long THRESHOLD)
{
if (index < THRESHOLD)
{
return (int)(tri2bin[table[(int)(index >> 2)] & 0xff] >> ((index & 3) << 1) & 3);
}
else {
return (int)(tri2bin[table[(int)(index - THRESHOLD)] & 0xff] >> 8 & 3);
}
}