Это затрагивает множество предметов, включая историческое значение байта, определение символа C на языке C и математику.
Для начала, байт исторически был многим, но в настоящее время мы почти всегда имеем в виду октет, который составляет 8 бит.Как игра слов, есть также клочок (или часто клочок), который составляет полбайта (не называется прикус).
Математика говорит нам, что при упорядоченной комбинации из 8 1-or-0
значений мы получаем 2<sup>8</sup> = 256
комбинаций.Иногда мы используем это без знака, иногда со знаком, но в любом случае мы хотим иметь 0 в диапазоне;таким образом, диапазон без знака 0..255
.Для подписанного диапазона у нас есть больше опций , из которых дополнение к двум является самым популярным;в этом случае мы получаем еще одно отрицательное значение, чем положительное, для диапазона -128..+127
.
C ++ наследует символ от C, где определено, что значение sizeof
равно 1, что является наименьшимадресуемый размер (т. е. имеющий различные значения адреса с &) и минимальный диапазон -128..127
или 0..255
в зависимости от того, подписан он или нет.Это сводится к тому, что требуется не менее 8 бит или один байт;ровно один байт, если машина его поддерживает.
0xff
- это другой способ записи 255. 0x
- это способ обозначения константы шестнадцатеричной , поэтому каждая цифра в ней составляет 4 бита (для 16 возможных цифр),эрго клев.Это преобразуется в беззнаковый октет со всеми битами, установленными в 1.
Если для вашего кода имеет значение определенный размер, существует заголовок stdint.h , который определяет типы минимальных и точных размеров, дляоптимизация скорости или размера.
Кстати, ASCII - это 7-битный набор символов.Машины с 7-битными байтами в наше время необычны, и популярны более широкие наборы символов, такие как ISO 8859-1 и UTF-8.