Системе, где 1 байт!= 8 бит? [дубликат]
этот вопрос уже есть ответ здесь:
Какие платформы имеют что-то другое, чем 8-битный символ?
12 ответов
все время я читаю такие предложения, как
Не полагайтесь на 1 байт размером 8 бит
использовать
CHAR_BITвместо 8 в качестве константы для преобразования между битами и байты
и так далее. Какие системы реальной жизни существуют сегодня, где это справедливо?
(я не уверен, есть ли различия между C и C++ относительно этого, или если это на самом деле язык агностик. Пожалуйста, поставьте ретаг, если это необходимо.)
9 ответов:
на старых машинах коды размером менее 8 бит были довольно распространены, но большинство из них были мертвы и ушли в течение многих лет.
C и C++ топ a минимум 8 бит на
char, по крайней мере, до стандарта C89. [Изменить: например, C90, §5.2.4.2.1 требуетCHAR_BIT>= 8 иUCHAR_MAX>= 255. C89 использует другой номер раздела (I верить это было бы §2.2.4.2.1), но идентичное содержание]. Они рассматривают "char " и" byte " как по существу синонимичный [Edit: например,CHAR_BITописывается как: "количество битов для самого маленького объекта, который не является битовым полем (байтом)".]есть, однако, текущие машины (в основном DSPs), где самый маленький тип больше 8 бит-минимум 12, 14 или даже 16 бит довольно распространен. Windows CE делает примерно то же самое: его наименьший тип (по крайней мере, с компилятором Microsoft) составляет 16 бит. Они делают не, однако, лечить
charКак 16 бит-вместо этого они возьмите (несоответствующий) подход, просто не поддерживая тип с именемcharна всех.
сегодня, в мире C++ на процессорах x86, довольно безопасно полагаться на один байт, являющийся 8 битами. Процессоры, где размер слова не является силой 2 (8, 16, 32, 64) очень редкость.
ТАК БЫЛО НЕ ВСЕГДА.
центральный процессор Control Data 6600 (и его братья) использовал 60-битное слово и мог обращаться только к слову за раз. В одном смысле, "байт" на CDC 6600 был 60 бит.
оборудование указателя байта DEC-10 работало с байтами произвольного размера. Указатель байта включал размер байта в битах. Я не помню, могли ли байты охватывать границы слов; я думаю, что они не могли, а это означало, что у вас было бы несколько ненужных битов на слово, если размер байта не был 3, 4, 9 или 18 бит. (DEC-10 использовал 36-битное слово.)
Если вы не пишете код, который может быть полезен на DSP, вы полностью вправе предположить, что байты-это 8 бит. Весь мир не может быть VAX (или Intel), но весь мир должен общаться, обмениваться данными, устанавливать общие протоколы и т. д. Мы живем в эпоху интернета, построенную на протоколах, построенных на октетах, и любая реализация C, где байты не являются октетами, будет очень трудно использовать эти протоколы.
также стоит отметить, что как POSIX, так и Windows имеет (и мандат) 8-разрядные байты. Это охватывает 100% интересных не встроенных машин, и в наши дни большая часть не-DSP встроенных систем, а также.
с Википедия:
размер байта был сначала выбрано, чтобы быть кратным существующим коды телетайпа, в частности 6-битные коды, используемые армией США (Fieldata) и военно-морской флот. В 1963 году, чтобы закончить использование несовместимого телепринтера коды по различным ветвям Правительство США, ASCII, 7-битный код, была принята в качестве Федеральной информации Обрабатывая стандарт, делая 6 битов байты коммерчески устарели. В ранний 1960-е годы, AT&T представила цифровой Телефония первая на междугородней магистрали русло. Они использовали 8-битный µ-закон кодирование. Это большие инвестиции пообещали снизить затраты на передачу для 8-разрядных данных. Использование 8-разрядных кодов для цифровой телефонии также вызвано 8-битные данные "октеты" должны быть приняты в качестве основная единица данных раннего Интернет.
как средний программист на основных платформах, вы делаете не нужно слишком беспокоиться об одном байте не 8 бит. Тем не менее, я бы все равно использовал
CHAR_BITконстанта в моем коде иassert(или лучшеstatic_assert) любые места, где вы полагаетесь на 8 бит байт. Это должно поставить вас на безопасную сторону.(Я не знаю ни одной соответствующей платформы, где это не соответствует действительности).
во-первых, количество бит в
charформально не зависит от "системы" или от "машины", хотя эта зависимость обычно подразумевается здравым смыслом. Количество битов вcharзависит только от реализация (т. е. компилятор). Нет проблем с реализацией компилятора, который будет иметь более 8 бит вcharдля любой "обычной" системы или машины.во-вторых, есть несколько встроенных платформ, где
sizeof(char) == sizeof(short) == sizeof(int), каждый из которых имеет 16 бит (я не помню точных названий этих платформ). Кроме того, хорошо известные машины Cray имели аналогичные свойства со всеми этими типами, имеющими 32 бита в них.
в истории существует куча странных архитектур, которые не используют собственные размеры слов, которые кратны 8. Если вы когда-нибудь столкнетесь с этим сегодня, дайте мне знать.
- первый коммерческий процессор от Intel был Intel 4004 (4-бит)
- PDP-8 (12-бит)
размер байта имеет исторически были зависит от аппаратного обеспечения и не существуют окончательные стандарты, которые мандат размер.
Это может быть хорошая вещь, чтобы иметь в виду, если вы делаете много встроенных вещей.
добавление еще одного в качестве ссылки, из Википедии запись на HP Saturn:
архитектура Saturn основана на nibble; то есть основная единица данных-это 4 бита, которые могут содержать одну двоично-десятичную цифру (BCD).
Comments