Эквивалент LargeInteger's testBit BigInteger?

Есть ли LargeInteger иметь эквивалент BigInteger "s testBit?

Если нет, то как testBit исполняться на LargeInteger?

У меня пока нет необходимых навыков для размножения ((this & (1<<n)) != 0),


Я попытался создать метод, просто скопировав и вставив приведенный выше код, указанный в документах:

static boolean testBit(int n){
    return ((this & (1<<n)) != 0);
}

Тем не менее, компилятор сообщает:

error: non-static variable this cannot be referenced from a static context
    return ((this & (1<<n)) != 0);
             ^
error: bad operand types for binary operator '&'
    return ((this & (1<<n)) != 0);
                  ^

1 ответ

Решение

Это лучшее, что я могу придумать, учитывая API:

static boolean testBit(LargeInteger i, int n) {
    return i.shiftRight(n).isOdd();
}

n это позиция проверяемого бита.

Я предполагаю, что вы поместили этот метод в некоторый служебный класс.

объяснение

Обычно, вы бы сделали num & (1 << pos) извлечь бит в pos позиция:

???????x?????
0000000100000
-------------
0000000x00000

Если все это 0, то x 0; иначе, x это 1.


В методе выше я делаю num >> pos:

???????x?????
-------------
????????????x

Мы знаем, что двоичное число является нечетным, когда его младший значащий бит равен 1, и это четное, когда его младший значащий бит равен 0.

Так что если число после сдвига вправо нечетно, мы знаем, что бит равен 1; если даже, мы знаем, что бит равен 0.

Другие вопросы по тегам