P1236R1: Почему стандарт c++ пытается отойти от слова "бит" при определении целых чисел?

Согласно P1236R1, теперь целочисленные типы определяются числами, а не битами.

type    minimum range exponent N
signed char     8
short          16
int            16
long           32
long long      64

Вместо определения значения "бит", которого в стандарте все еще не хватает, C++ решает не делать этого, а вместо этого определяет эти типы в терминах range exponent.

Зачем?
Почему лучше не зависеть от слова "бит"?
Что такое "ненаблюдаемые биты" в этом предложении?

P1236R1 является частью C++ 20

Ответы

Ответ 1

В соответствии с правилами ISO обсуждения комитета ISO C++ являются закрытыми и не могут передаваться сообществу программистов в целом. Комитет опубликовал следующую информацию по этому вопросу (выпуск 1857):

Примечания от встречи в июне 2014 года:

CWG решила переформулировать описание самих операций, чтобы избежать ссылок на биты, отсекая более крупные вопросы определения "бит" и тому подобное, чтобы выпустить 1943 для дальнейшего рассмотрения.

Выпуск 1861 содержит аналогичный язык.

Я не присутствовал на этом собрании, но у него уже есть определение в ИСО/МЭК 2382 (которое является нормативной ссылкой на стандарт C++):

немного

двоичный символ

любая из цифр 0 или 1 при использовании в двоичной системе

Это определение явно неприемлемо для многих потенциальных применений в стандартах C++, таких как разговор о знаковом бите (который подразумевает бит в определенной позиции в типе/слове) или ширине (в битах) целочисленного типа,