Подтвердить что ты не робот

Система, где 1 байт!= 8 бит?

Все время я читаю предложения типа

не полагаются на 1 байт размером 8 бит

используйте CHAR_BIT вместо 8 в качестве константы для преобразования между битами и байтами

et cetera. Какие системы реальной жизни существуют сегодня, где это верно? (Я не уверен, существуют ли различия между C и С++ относительно этого или если он на самом деле является агностиком языка. Пожалуйста, повторите, если это необходимо.)

4b9b3361

Ответ 1

На старых машинах коды, меньшие, чем 8 бит, были довольно распространены, но большинство из них были мертвы и ушли уже много лет.

C и С++ задали минимум 8 бит для char, по крайней мере, еще в качестве стандарта C89. [Редактировать: Например, для C90, §5.2.4.2.1 требуется CHAR_BIT >= 8 и UCHAR_MAX >= 255. В C89 используется другой номер раздела (я считаю, что это будет §2.2.4.2.1), но идентичный содержание]. Они рассматривают "char" и "byte" как существенно синоним [Edit: например, CHAR_BIT описывается как: "количество бит для наименьшего объекта, который не является битовым полем (байтом)".]

Существуют, однако, текущие машины (в основном DSP), где наименьший тип больше 8 бит - не менее 12, 14 или даже 16 бит является довольно распространенным явлением. Windows CE делает примерно то же самое: наименьший тип (по крайней мере, с компилятором Microsoft) - 16 бит. Однако они не обрабатывают char как 16 бит - вместо этого они берут (несоответствующий) подход, просто не поддерживая тип с именем char вообще.

Ответ 2

СЕГОДНЯ, в мире С++ на процессорах x86, довольно безопасно полагаться на один байт, составляющий 8 бит. Процессоры, где размер слова не равен 2 (8, 16, 32, 64), очень необычны.

ЭТО НЕ ВСЕГДА ТАК.

Центральный процессор Control Data 6600 (и его братья) использовал 60-битное слово и мог обращаться только к слову за раз. В некотором смысле "байт" на CDC 6600 составлял 60 бит.

Аппарат указателя байтов DEC-10 работал с байтами произвольного размера. Указатель байтов включал размер байта в битах. Я не помню, могли ли байты охватывать границы слов; Я думаю, что они не могли, а это означало, что у вас было бы несколько бит бит за слово, если размер байта не был 3, 4, 9 или 18 бит. (DEC-10 использовал 36-битное слово.)

Ответ 3

Если вы не пишете код, который может быть полезен на DSP, вы вправе предположить, что байты составляют 8 бит. Во всем мире не может быть VAX (или Intel), но весь мир должен обмениваться данными, обмениваться данными, устанавливать общие протоколы и т.д. Мы живем в эпоху Интернета, построенной на протоколах, построенных на октетах, и любая реализация C, где байты не являются октетами, будет иметь очень трудное время, используя эти протоколы.

Также стоит отметить, что как POSIX, так и Windows имеют (и мандат) 8-битные байты. Это охватывает 100% интересных не встроенных машин, и в наши дни большая часть встроенных систем, отличных от DSP.

Ответ 4

От Wikipedia:

Размер байта был сначала выбрано кратным существующим телетайп-коды, в частности 6-битные коды, используемые армией США (Fieldata) и флота. В 1963 году закончить использование несовместимого телепринтера коды разных ветвей Правительство США, ASCII, 7-битный код, был принят в качестве федеральной информации Стандарт обработки, составляющий 6 бит байты коммерчески устарели. в начале 1960-х годов AT & T представил цифровую телефония сначала на междугородном линий. Они использовали 8-битный μ-закон кодирование. Это крупные инвестиции обещал сократить расходы на передачу для 8-битных данных. Использование 8-битных кодов для цифровой телефонии также 8-битные "октеты" данных должны быть приняты как базовый блок данных раннего Интернет.

Ответ 5

Во-первых, количество бит в char формально не зависит от "системы" или "машины", хотя эта зависимость обычно подразумевается здравым смыслом. Количество бит в char зависит только от реализации (т.е. От компилятора). Там нет проблем с внедрением компилятора, который будет иметь более 8 бит в char для любой "обычной" системы или машины.

Во-вторых, существует несколько встроенных платформ, где sizeof(char) == sizeof(short) == sizeof(int), каждый из которых имеет 16 бит (я не помню точные имена этих платформ). Кроме того, известные машины Cray имели сходные свойства, причем все эти типы имеют 32 бита в них.

Ответ 6

Как обычный программист на основных платформах, вам не нужно слишком беспокоиться о том, что один байт не будет 8 бит. Тем не менее, я по-прежнему использовал константу CHAR_BIT в своем коде и assert (или лучше static_assert) в любых местах, где вы полагаетесь на 8-битные байты. Это должно поставить вас в безопасное место.

(Я не знаю какой-либо соответствующей платформы, где это не выполняется).

Ответ 7

В истории существовала куча нечетных архитектур, в которых не использовались собственные размерные слова, где кратные 8. Если вы когда-нибудь сталкиваетесь с любым из них сегодня, дайте мне знать.

  • Первым коммерческим процессором Intel стал Intel 4004 (4-разрядный)
  • PDP-8 (12-разрядный)

Размер байта исторически зависит от оборудования и нет существуют определенные стандарты, которые укажите размер.

Это может быть хорошей вещью, чтобы иметь в виду, если вы делаете много встроенных материалов.

Ответ 8

Я делаю много встроенных и в настоящее время работаю над кодом DSP с CHAR_BIT из 16

Ответ 9

Добавление еще одной ссылки, из Википедии в HP Saturn:

Архитектура Сатурна основана на гвоздях; то есть основной блок данных - 4 бита, который может содержать одну двоично-кодированную десятичную (BCD) цифру.