Преобразование кода из C в Java: сдвиги - PullRequest
1 голос
/ 07 августа 2011

У меня есть некоторый C-код, где целое число без знака сдвигается (со знаком) переменной.Например,

1u << i;

При преобразовании в Java я могу просто заменить его на int со знаком?

Я думаю, что это будет безопасно для сдвигов влево, но я не уверен в правильностисдвиги.

Ответы [ 2 ]

3 голосов
/ 07 августа 2011

В Java есть два типа правых сдвигов.>>> присоединит 0 для заполнения пустых мест как для положительных, так и для отрицательных чисел (логическое смещение вправо), а >> добавит 1 для отрицательных и 0 в случае положительного (расширение знака).

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

JavaScript ведет себя так же, как Java для >> и >>>.

В C # при использовании >>для отрицательных чисел все выставленные биты, кроме первого, устанавливаются в 0. Первое остается в 1.

Обратите внимание, что для всех вышеперечисленных языков, >> с положительными числами присоединяет нули.Только случай с отрицательными числами меняется.Кроме того, << добавляет нули к битам для всех языков.

0 голосов
/ 07 августа 2011

Это хорошо для левых сдвигов, для правых сдвигов используйте оператор >>>.

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