@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));
  • Вопрос задан
  • 100 просмотров
Решения вопроса 1
zagayevskiy
@zagayevskiy
Android developer at Yandex
В первом случае у тебя лишний ноль в конце. Про знак уже сказали.
Во втором - а что не так? Первая единица куда должна деться?
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@MaxLich
java developer с небольшим опытом
В первом случае происходит переполнение, поэтому получается отрицательное число, а вот по второму случаю сходу так ничего не могу сказать.
Ответ написан
Ваш ответ на вопрос

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

Войти через TM ID
Похожие вопросы
ИП Шпак Виктория Сергеевна Санкт-Петербург
от 90 000 до 150 000 руб.
Payneteasy Москва
от 120 000 руб.
МойСклад Москва
от 120 000 до 160 000 руб.
18 авг. 2018, в 01:10
17000 руб./за проект
17 авг. 2018, в 23:00
5500 руб./за проект