В C99 спецификации состояний:Арифметический сдвиг вправо знаковой целого
Результат Е1 >> Е2 Е1 правый смещенной позиции битов E2. Если E1 имеет неподписанный тип или если E1 имеет подписанный тип и неотрицательное значение, значение результата является неотъемлемой частью частного E1/2^E2. Если E1 имеет подписанный тип и отрицательное значение, результирующее значение определяется реализацией.
Мне интересно знать, какой именно реализации/Составители не будет рассматривать подписанную E1 >> 31
как гроздь 11111....
?
Несколько чей -1 не 1111 .... и много, чей int не 32 бит. – user3528438
Примечание. Не используйте устаревшую версию стандарта. C - C11, а не C99. Сказал, что текст очень ясен. Не полагайтесь на него, если вы хотите, чтобы ваш код переносился. Обратите внимание, что сдвиг также может вызывать неопределенное поведение. См. 6.5.7p3 в стандарте (т. Е. Единственная допустимая версия). – Olaf
Также существует множество 32-битных реализаций с двумя дополнениями, которые игнорируют подпись и производят «1» в качестве результата. Стандарт на самом деле тщательно сформулирован, чтобы избежать указания того, выполняет ли '>>' арифметический сдвиг или логический сдвиг. –