Цитата(GetSmart @ May 19 2016, 15:53)

Если выражение "the result is the ones’ complement of its operand." подразумевает что-то большее, чем побитовую инверсию операнда, как тут некоторые утверждали.
Это выражение подразумевает не большее или меньшее побитовой инверсии, а совершенно другое: арифметическую операцию между 2 в наибольшей разрядной степени
и числом, к которому применяется операция дополнения. Это понятие из математического аппарата представления чисел в кодах и С++ его просто унаследовал.
Оно полностью совпадает с побитовой инверсией и почему стандарт не определил тильду как побитовую инверсия я знать не могу.
Но приходится довольствоваться фактом как таковым.
Цитата(GetSmart @ May 19 2016, 15:53)

В другом толковании обязано присутствовать определение (действий) термина. Если этого определения применительно к целочисленным операндам в стандарте нет и нет однозначности в том, откуда эта терминология наследуется, то применение такой терминологии некорректно.
Вы невнимательны, я определение действий уже приводил
(n4582) 5.3.1.8.
The negative of an unsigned quantity is computed by subtracting its value from 2n, where n is the number of bits in the promoted operand.
Действие тильды определено строго определено как вычитаение (естественно согласно правилам расширения).
Определение более корректно, в отличие от тех же побитовых операций, которые вводятся как результат действия одноименных функций.
Цитата(GetSmart @ May 19 2016, 15:53)

По правилам Си (как минимум вне препроцессора) все целочисленные/enum rvalue - двоичные. Могут быть и со знаком и без. Ширина операнда (в т.ч. числовых констант) и до и после применения тильды ограничена и следить за ней должен программист. Эти обстоятельства могут дополнять и обрезать наследуемую терминологию "ones’ complement integral operand", но вот чью именно.
...........................
Что нельзя? Наоборот, для мультиплатформенности очень желательно перед тильдой ставить явное преобразование к не меньшему, чем размер самого широкого из ожидаемых int. Например .. ~(uint32_t)(expression) .. Ширину операнда выполнение тильды не меняет (учитывая авто-пред-расширение). Соответственно, если перед тильдой операнд явно расширить до любой нужной ширины, не менее int, то это именно то самое.
...........................
В несоответствии поведения компилятора стандарту и необходимости программисту отслеживать корректность своего кода сомнений ни разу не возникало.
Цитата(GetSmart @ May 19 2016, 15:53)

Никогда не видели выражений вроде x = y & -4 ? Или & -4U. Знаковое расширение вместе с неявным пред-расширением в int бывает удобно и при применении тильды.
Всячески стараюсь избегать подобных конструкций.
Даже index[array] никогда не использую вместо array[index] несмотря на то, что это одно и тоже.
Предпочитаю иметь код максимально читабельным.
Цитата(GetSmart @ May 19 2016, 15:53)

Вспомнилась ещё одна необсуждённая сторона тильды. Применение тильды к нетипизированной целочисленной константе. Особенно в сочетании с несколькими, в т.ч. арифметическими операциями на этапе компиляции. Особенно в препроцессоре (#if). Может быть терминология в эту сторону смотрела.
В случае константы действия, в принципе, те же: грубо говоря источником значения для расширенного операнда будет константа, а не значение переменной.
Цитата(GetSmart @ May 19 2016, 15:53)

В таких правилах тоже тесть проблема. Если я правильно понял.
u16 a;
u32 b,c;
c = b & ~a;
Если бы (в альтернативном Си) тильде не требовалось расширение, то ~a осталось бы 16-битной, а в "c" отсутствовали бы старшие 16 бит из "b". Ну а если & или | или ^ нельзя будет применять к разным по ширине операндам, то это крайне неудобно из-за лишнего текста с явными приведениями.
С альтернативным Си, точнее С++, Вы правильно поняли: я не оспариваю как правильность действий компилятора в соответствии со стандартом, так и сам стандарт.
Я занимаюсь безнадежным делом: вербую сторонников альернативы. В которой тильда была бы побитовой операцией инверсии как набор элементарных логических not.
В которой операция n-разрядного операнда трактовалась бы как набор из n логических операций not.
Если не требовать расширения для тильды, то результат применения ~ к a действительно был бы 16-ти разрядным, но не операнд ~а.
Поменялся бы лишь порядок расширения:
Стандарт: a ->расширение до 32 бит -> набор 32-х "not"
Альтернатива: a -> набор 16-ти "not" -> расширение до 32 бит.
Т.е. в альтернативе c = b & ~a; был бы эквивалентен следующему: {u16 temp; temp=~a; c = b & temp; },
который никак не противоречит существующему стандарту.
Цитата(GetSmart @ May 19 2016, 15:53)

3D в данном случае образ терминологии из более широкой базы (математики, языков программитрования и пр.).
Так оно и есть, стандарт не следит за точным и всеобъемлющим наличием точных формулировок: оно и понятно - у них и без этого работы выше крыши.
Вся терминология как раз позаимствована извне и в некоторой степени интуитивна.
Но если уж использовать аллегорию с кинотеатром, то логические операции - канал звука, запустили по каналу видео - арифметические операции.
И потом на основании того, что результативная картинка полностью совпадает с заранее согласно правилами обработки видеосигнала утверждается
о правильности выбора.