От cppreference.com:
Для unsigned a и для подписанного a с неотрицательными значениями значение a >> b является целой частью a/2 b. Для отрицательного a значение a >> b определяется реализацией (в большинстве реализаций это выполняет арифметический сдвиг вправо, так что результат остается отрицательным).
В любом случае, если значение правильного операнда отрицательное или больше или равно числу бит в продвинутом левом операнде, поведение не определено.
Почему у нас есть неопределенное поведение в случае, если правый операнд больше или равен количеству бит в продвинутом левом операнде?
Мне кажется, что результат должен быть 0 (по крайней мере для неподписанных/положительных целых чисел)...
В частности, с g++ (версия 4.8.4, Ubuntu):
unsigned int x = 1;
cout << (x >> 16 >> 16) << " " << (x >> 32) << endl;
дает: 0 1