Вот крошечная программа на Java
public class otherclass {
public static void main(String[]args){
byte a=-5;
byte d= (byte) (a>>>1);
System.out.println(d);
byte e= (byte) (a>>>2);
System.out.println(e);
byte f= (byte) (a>>1);
System.out.println(f);
byte g= (byte) (a>>2);
System.out.println(g);
}
}
вывод:
-3
-2
-3
-2
Вторые два выхода (те -3 и -2 логических сдвигов) я понимаю.
отрицательный 5 - 11111011
арифметический сдвиг сдвигается вправо, а дополнительный добавленный бит слева похож на MSB. Таким образом, один сдвиг составляет 11111101
, что отрицательно 3. Отрицательные два тоже подойдут.
Логический сдвиг предполагает добавление нулей влево. 11111011
должно стать 01111101
, что равно 125. Как он также выводит отрицательное 3?
int
(4 байта). - person Sotirios Delimanolis   schedule 01.04.2015int
имеет 32 байта.short
- 16 байт, аbyte
- 8. Я тоже не понимаю комментарий @SotiriosDelimanolis. - person D. Ben Knoble   schedule 01.04.2015