Почему две идентичные команды выдают разные результаты?
Для 1 байтового без знакового числа ~0 дает 11111111.
Делая  (~0) << k вы обнуляете последние k бит числа. Далее битовое И с подобной маской дает обнуление последних k бит чилса, что и требовалось.
var_dump((~0) === 1); равняется false