Начнём с простого случая – когда отрицательные числа не нужны вовсе.
Беззнаковое представление (unsigned) – способ записи целых чисел, при котором все биты отведены под само значение. Число читается как обычная двоичная запись: разряды с весами $2^0$, $2^1$, $2^2$, … и никаких исключений.
Диапазон беззнакового числа из n битов – от 0 до $2^n - 1$:
| Разрядность | Диапазон | Всего значений |
|---|---|---|
| 8 битов | 0 … 255 | 256 |
| 16 битов | 0 … 65 535 | 65 536 |
| 32 бита | 0 … 4 294 967 295 | $\approx 4{,}3 \cdot 10^9$ |
| 64 бита | 0 … 18 446 744 073 709 551 615 | $\approx 1{,}8 \cdot 10^{19}$ |
Обратите внимание на «− 1» в формуле: значений ровно $2^n$, но одно из них – ноль, поэтому максимум на единицу меньше. Восьмибитное максимальное значение – 255, а не 256.
Беззнаковое представление выбирают там, где отрицательное значение бессмысленно по смыслу задачи: размер файла в байтах, количество символов в строке, индекс элемента, яркость канала цвета (те самые 0–255 в RGB), адрес в памяти. Половина всех комбинаций при этом не тратится на минус – и максимум получается вдвое больше, чем у знакового числа той же ширины.