Рубрики

Побитовые операторы сдвига вправо в Java

В C / C ++ есть только один оператор сдвига вправо '>>', который следует использовать только для целых положительных или целых чисел без знака. Использование оператора сдвига вправо для отрицательных чисел не рекомендуется в C / C ++ и когда используется для отрицательных чисел, вывод зависит от компилятора (см. это ). В отличие от C ++, Java поддерживает следующие два оператора сдвига вправо.

1) >> (Сдвиг вправо со знаком) В Java оператор '>>' является оператором сдвига вправо со знаком. Все целые числа подписаны в Java, и можно использовать >> для отрицательных чисел. Оператор «>>» использует знаковый бит (крайний левый бит), чтобы заполнить концевые позиции после сдвига. Если число отрицательное, то 1 используется в качестве наполнителя, а если число положительное, то 0 используется в качестве наполнителя. Например, если двоичное представление числа равно 1 0… .100, то смещение вправо на 2 с использованием >> сделает его 11 …… .1.
Посмотрите следующие Java-программы в качестве примера '>>'

class Test {

    public static void main(String args[])  {

       int x = -4;

       System.out.println(x>>1);   

       int y = 4;

       System.out.println(y>>1);   

    }    

}

Выход:

-2
2

2) >>> (Беззнаковое смещение вправо) В Java оператор '>>>' является беззнаковым оператором смещения вправо. Он всегда заполняет 0 независимо от знака числа.

class Test {

    public static void main(String args[])  {

  

       // х хранится в форме дополнения 32 бит 2.

       // Двоичное представление -1 - это все 1 (111..1)

       int x = -1;  

  

       System.out.println(x>>>29);  // Значение 'x >>> 29' равно 00 ... 0111

       System.out.println(x>>>30);  // Значение 'x >>> 30' равно 00 ... 0011

       System.out.println(x>>>31);  // Значение 'x >>> 31' равно 00 ... 0001

   }    

Выход:

7
3
1

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Побитовые операторы сдвига вправо в Java

0.00 (0%) 0 votes