运营商>>不能应用于char和long

时间:2016-01-07 08:09:20

标签: java c#

我试图将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;
    }
}

2 个答案:

答案 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;

Binary & operators are predefined for the integral types and bool and the & operator evaluates both operators regardless of the first one's value.

因此,您需要匹配&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);
    }
}