@Domus

Почему так работает побитовый сдвиг?

Не могу понять, почему таким образом работает побитовый сдвиг влево. Разве мы не должны в результате первой операци получить 1100, а в результате второй 100110?
String in = "32";
byte[] b = in.getBytes();

System.out.println(Integer.toBinaryString(b[0])); // 110011
byte n = (byte)(b[0]<<2);
System.out.println(Integer.toBinaryString(n)); // 11111111111111111111111110011000
byte n = (byte)(b[0]<<1); // 1100110
System.out.println(Integer.toBinaryString(n));
  • Вопрос задан
  • 121 просмотр
Решения вопроса 1
zagayevskiy
@zagayevskiy Куратор тега Java
Android developer at Yandex
В первом случае у тебя лишний ноль в конце. Про знак уже сказали.
Во втором - а что не так? Первая единица куда должна деться?
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@MaxLich
java developer
В первом случае происходит переполнение, поэтому получается отрицательное число, а вот по второму случаю сходу так ничего не могу сказать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы