byte x = -1;
for(int i = 0; i < 8; i++)
{
x = (byte) (x >>> 1);
System.out.println("X: " + x);
}
Как я понимаю, java хранит данные в 2'-дополнении, что означает -1 = 11111111 (согласно wikipedia).
Кроме того, из java-документов: "Битовая диаграмма задается левым операндом, а количество позиций сдвигается правым операндом. Беззнаковый оператор сдвига вправо" → > "сдвигает ноль в крайнее левое положение, а крайняя левая позиция после" → " зависит от расширения знака.
Это означает, что → > будет каждый раз смещать 0 влево. Поэтому я ожидаю, что этот код будет
Итерация: бит-представление x
0: 11111111
1: 01111111
2: 00111111
3: 00011111
... так далее
Однако мой вывод всегда X: -1, что означает (я думаю), что → > помещает бит знака в крайнее левое положение. Поэтому я затем попробую → , и тот же результат.
Что происходит? Я ожидал бы, что мой вывод будет: X: -1, x: 127, x: 63 и т.д.