В Java нет беззнаковых, поэтому и взял 64-бит long. А вообще стояла задача показать юнным программистам Java неявную ошибку, связанную с присвоением разнодлинных типов при распространении знака. За основу взяты наши, похожие микроконтроллерные проблемы с присвоением char n = 15; long a = (1<<n); где "а" будет не 0x8000, а 0xffff8000, и решение заключалось в (1L<<n) или ((int32_t)1<<n). И вот в Эклипсе второй вариант не проканал :(