Представим, что у нас задача поместить единицу на 1 место и 63 нуля после.
Т.е. сделать что-то такое 1
1000000000000000000000000000000000000000000000000000000000000000
Вот к примеру, попробуем мы 1 сместить на 64 позиции.
long result = (long) 1 << 64;
System.out.println(Long.toBinaryString(result)); // получаем единицу, логично. Long положительный может иметь 63 разряда.
Попробуем обойти эту проблему
long result2 = (long) 128 << 56;
System.out.println(Long.toBinaryString(result2));
И получаем необходимый результат
1000000000000000000000000000000000000000000000000000000000000000
Сдвиг 128 на 56 раз помещает единицу на 64 место.
Вопрос, почему мы можем это сделать методом выше, а просто 1 << 64 никак?