Побитовые операторы (~, &, | и ^) работают с поразрядным представлением своих продвинутых операндов. Могут ли такие операции вызывать поведение undefined?
Например, оператор ~ определяется таким образом в стандарте C:
6.5.3.3 Унарные арифметические операторы
Результатом оператора
~является поразрядное дополнение его (продвинутого) операнда (то есть каждый бит в результате устанавливается тогда и только тогда, когда соответствующий бит в преобразованном операнде не задан). Целые рекламные акции выполняются в операнде, и результат имеет продвинутый тип. Если продвинутый тип является неподписанным типом, выражение~Eэквивалентно максимальному значению, представленному в этом тире минусE.
На всех архитектурах ~0 создает бит-шаблон со знаковым битом, установленным на 1, и все биты значений, установленные на 1. В архитектуре с одним дополнением это представление соответствует отрицательному нулю. Может ли этот бит-образ быть представлением ловушки?
Существуют ли другие примеры поведения undefined, включающие простые побитовые операторы для более общих архитектур?