Исторически, байты не всегда были 8-битными по размеру (в этом отношении компьютеры также не должны быть двоичными, но недвоичные вычисления видели намного меньше действия на практике).Именно по этой причине в стандартах IETF и ISO часто используется термин октет - они не используют байт , потому что они не хотят предполагать, что это означает 8-бит, когда это не так.'t.
Действительно, когда был введен байт , он был определен как 1-6-битная единица.Размеры байт, используемые на протяжении всей истории, включают 7, 9, 36 и машины с байтами переменного размера.
8 был смесью коммерческого успеха, это было достаточно удобное число для людей, думающих об этом (чтодруг друга) и, без сомнения, другие причины, о которых я совершенно не знаю.
Упомянутый вами стандарт ASCII предполагает 7-битный байт и основан на более ранних 6-битных стандартах связи.
Редактировать: Возможно, стоит добавить к этому, поскольку некоторые настаивают на том, что те, кто говорит, что байты всегда являются октетами, смешивают байты со словами.
октет являетсяимя, данное единице из 8 бит (от латинского «восемь»).Если вы используете компьютер (или на более высоком уровне абстракции, язык программирования), где байты являются 8-битными, то это легко сделать, в противном случае вам понадобится какой-то код преобразования (или вспомогательное оборудование).Концепция octet больше подходит для сетевых стандартов, чем для локальных вычислений, поскольку будучи независимой от архитектуры, она позволяет создавать стандарты, которые можно использовать при обмене данными между машинами с разными размерами байтов, и, следовательно, ее использованиев стандартах IETF и ISO (между прочим, ISO / IEC 10646 использует октет , где стандарт Unicode использует байт для того, что по существу - с некоторыми незначительными дополнительными ограничениями в последней части - тот же стандартхотя в стандарте Юникод подробно указано, что они означают октет на байт , хотя байты могут быть разных размеров на разных машинах).Концепция октет существует именно потому, что 8-битные байты являются общими (отсюда и выбор их использования в качестве основы для таких стандартов), но не универсальными (отсюда и необходимость в другом слове, чтобы избежать двусмысленности).
Исторически, байт был размером, используемым для хранения символа, что, в свою очередь, основывается на практиках, стандартах и фактических стандартах, которые предшествуют компьютерам, используемым для телекса и других методов связи, начиная, возможно, с Бодо в1870 (я не знаю ничего ранее, но открыт для исправлений).
Это отражено в том факте, что в C и C ++ модуль для хранения байта называется char
, размер которого в битахопределяется CHAR_BIT
в стандартном заголовке limit.h.Различные машины будут использовать 5,6,7,8,9 или более бит для определения символа.В наши дни, конечно, мы определяем символы как 21-битные и используем разные кодировки для хранения их в 8-, 16- или 32-битных единицах (и не разрешенных Юникодом способов, таких как UTF-7 для других размеров), но исторически это былокак это было.
В языках, которые стремятся быть более согласованными между машинами, а не отражать архитектуру машины, byte
имеет тенденцию фиксироваться в языке, и в наши дни это обычно означает, что это определено вязык как 8-битный.Учитывая точку в истории, когда они были сделаны, и что большинство машин теперь имеют 8-битные байты, различие в значительной степени спорное, хотя это не невозможно реализовать компилятор, во время выполнения, и т.д. для таких языков, на машинах с разными размерамибайт, просто не так просто.
Слово - это «естественный» размер для данного компьютера.Это менее четко определено, поскольку оно затрагивает несколько совпадающих проблем, которые обычно совпадают, но могут и не быть.Большинство регистров на машине будут такого размера, но некоторые не могут.Наибольший размер адреса обычно был бы словом, хотя это может быть и не так (Z80 имел 8-битный байт и 1-байтовое слово, но допускал некоторое удвоение регистров, чтобы обеспечить некоторую 16-битную поддержку, включая 16-битнуюадресация).
Опять же, мы видим здесь разницу между C и C ++, где int
определяется в терминах размера слова, а long
определяется, чтобы использовать преимущества процессора, который имеет "длинное слово"Концепция должна существовать, хотя, возможно, в данном случае она идентична int
.Минимальное и максимальное значения снова находятся в заголовке limit.h.(Действительно, с течением времени int
может быть определено как меньшее, чем естественный размер слова, как комбинация согласованности с тем, что является обычным в других местах, сокращение использования памяти для массива целых чисел и, возможно, другие проблемы, которые яне знаю).
Языки Java и .NET используют подход, определяющий int
и long
как фиксированный для всех архитектур, и решение проблем, возникающих во время выполнения (особенноJITter) иметь дело с.Примечательно, что даже в .NET размер указателя (в небезопасном коде) будет варьироваться в зависимости от архитектуры, которая будет являться базовым размером слова, а не навязанным языком размером слова.
Следовательно, октет, байт иword все очень независимы друг от друга, несмотря на то, что отношение октета == байта и слова, являющегося целым числом байтов (и целым двоичным числом, таким как 2, 4, 8 и т. д.), распространено сегодня.