Я не совсем уверен, почему Комитет по стандартам пока не разрешил каким-либо образом код может определять поведение способом, независимым от базовой архитектуры и размера слова (чтобы в некоторых машинах кода не использовалась подписанная семантика для сравнений, где другие машины будут использовать неподписанную семантику), но по какой-либо причине они еще не сделали этого. Поддержка представления своего дополнения является лишь частью этого.
стандарт C ++ по-прежнему отказывается указывать двоичное представление целочисленных типов. Это потому, что существуют реальные реализации C ++, которые не используют арифметику дополнения 2? Я считаю, что трудно поверить. Это потому, что комитет опасался, что будущие достижения в области аппаратного обеспечения сделают понятие «бит» устаревшим? Снова трудно поверить. Кто-нибудь может пролить свет на это?
Фон: Я был удивлен дважды в одной ветке комментариев (ответ Бенджамина Линдлиэтот вопрос). Во-первых, из комментария Петра:
Сдвиг вправо на подписанном типе - неопределенное поведение
Во-вторых, из комментария Джеймса Канзе:
при присваивании long, если значение не умещается в long, результаты определяются реализацией
Я должен был посмотреть их в стандарте, прежде чем я поверил им. Единственная причина для них состоит в том, чтобы приспособить целочисленные представления не-2-дополнения. ПОЧЕМУ?