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? Что правильно?