Ответ 1
С++ задает диапазоны интегральных типов по ссылке на стандарт C. В стандарте C говорится:
Для беззнаковых целочисленных типов, отличных от
unsigned char
, биты представления объекта должны быть разделены на две группы: биты значений и биты заполнения (их не должно быть ни одного). Если бит N значений бит, каждый бит должен представлять собой разную мощность 2 между 1 и 2 N 1 так что объекты этого типа должны быть способны представляющие значения от 0 до 2 N 1 с использованием чистого двоичного представления; это должно быть известно как представление стоимости. Значения любых битов дополнений не определены.
Кроме того, С++ требует:
Незнакомые целые числа должны подчиняться законам арифметики по модулю 2 n где n - количество бит в представлении значений этого конкретного размера целых чисел.
Полагая все это вместе, мы обнаруживаем, что неподписанный интегральный тип имеет n битов значения, представляет значения в диапазоне [0, 2 n) и подчиняется законам арифметики по модулю 2 п.