как работает (я >>> -дистанция) - PullRequest
3 голосов
/ 01 марта 2012

это реализация rotateLeft в Long:

public static long rotateLeft(long i, int distance) {
   return (i << distance) | (i >>> -distance);
}

но я не могу понять, как (я >>> -дистанция) работает! кто-то, кто может сказать мне, как! спасибо.

Ответы [ 2 ]

7 голосов
/ 01 марта 2012

Принимаются только самые младшие биты значения сдвига.

Это то же самое, что и

return (i << (distance & 63)) | (i >>> (-distance & 63));

или

return (i << (distance & 63)) | (i >>> ((64-distance) & 63));

или

return (i << distance) | (i >>> (64-distance));

Одной из причин использования отрицательного числа является то, что оно работает независимо от типа, поэтому вы можете смело менять его в будущем.

например.

// This works regardless of whether `x` is `int` or `long` 
// and you can safely change the type in the future.
// 1 if negative, 0 if non-negative
x >>> -1;

// works for 32-bit but not 64-bit so if you change the type later,
// it could break without compiler error.
x >>> 31;

Вы можете найти это интересным http://vanillajava.blogspot.com/2012/01/shifting-challenge.html

0 голосов
/ 01 марта 2012

>>> - это оператор смещения вправо без знака .

Оператор смещения вправо без знака ">>>" переводит ноль в крайнее левое положение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...