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 bit манипуляция
Кроме того, из java-документов: «Битовая паттерн задается левым операндом и числом позиций для сдвига по правостороннему операнду. Оператор сдвига без знака« >>> »сдвигается нуль в крайнее левое положение, а крайнее левое положение после «>>» зависит от расширения знака. »
Это означает, что >>> будет каждый раз сдвигать 0 влево. Поэтому я ожидаю, этот код будет
итерация: битовое представление х
0: 11111111
1: 01111111
2: 00111111
3: 00011111
. ..so on
Однако мой выход - alwa ys X: -1, что означает (я думаю), что >>> помещает бит знака в крайнее левое положение. Поэтому я затем попробую >>, и тот же результат.
Что происходит? Я бы ожидал, что мой результат будет следующим: X: -1, x: 127, x: 63 и т. Д.
Это одна из проблем в Java Puzzlers. – starblue