C11 §6.5.7 Пункт 5:
Результатом
E1 >> E2являетсяE1смещение по правому краюE2. ЕслиE1имеет неподписанный тип или еслиE1имеет подписанный тип и неотрицательное значение, значение результата является неотъемлемой частью факторE1 / 2*^E2. ЕслиE1имеет подписанный тип и отрицательный значение, результирующее значение определяется реализацией.
Но в справочном документе viva64 указано:
int B; B = -1 >> 5; // unspecified behavior
Я запустил этот код на GCC и всегда дает вывод -1.
Итак, стандарт говорит, что "Если E1 имеет тип со знаком и отрицательное значение, результирующее значение определяется реализацией" , но этот документ говорит, что -1>>5; - это неопределенное поведение.
Итак, Is -1>>5; неуказанное поведение в C? Что правильно?