Стандарт C не указывает, что должно происходить, когда счетчик сдвига отрицателен или больше (или даже равен) точности переменной.
Причина в том, что стандарт C не хотел навязывать поведение, которое потребовало бы выдачи дополнительного кода в случае параметрического сдвига. Поскольку разные процессоры делают разные вещи, стандарт говорит, что все может произойти.
С аппаратным обеспечением x86 оператор сдвига использует только последние 5 бит счетчика сдвига, чтобы определить величину сдвига (это можно увидеть, прочитав справочное руководство CPU ), так что это, скорее всего, произойдет любой компилятор C или C ++ на этой платформе.
См. Также этот ответ для аналогичного вопроса.