Как работает оператор сдвига битов Java (>>>)? - PullRequest
0 голосов
/ 24 июня 2019

Вывод, который я вычислил, сдвинув справа число 2 к 20 и затем преобразовав результат в десятичную, не соответствует выводу. Почему код ниже генерирует такой неожиданный вывод?

class OperatorExample{  
    public static void main(String args[]){  

        System.out.println(-20>>>2);  
    } 
}

output: 1073741819

1 Ответ

2 голосов
/ 24 июня 2019

Расчет составляет:

Взять -20:

jshell> Integer.toBinaryString(-20)
$1 ==> "11111111111111111111111111101100"

Сдвиньте его вправо на 2, что удаляет последние два нуля:

jshell> Integer.toBinaryString(-20 >>> 2)
$2 ==> "111111111111111111111111111011"

И преобразовать его в десятичное число:

jshell> 0b111111111111111111111111111011
$3 ==> 1073741819
...