Да, нашел у Кернигана, но все же приятно, когда компилятор обрабатывает это дело по понятиям.
А по правилам чтож теперь:
if(sh < 32) x= 0xffffffff< sh;
else x=0;
теперь понятен термин надежность ПО.
"Результат не определен, если правый операнд отрицателен или его значение превышает число битов в типе левого выражения или равно ему." K&R