Почему 8 и 256 такие важные цифры в компьютерных науках?
Я не очень хорошо знаю об архитектуре RAM и HDD или о том, как электроника справляется с частями памяти, но это всегда вызывало моё любопытство: почему мы решили остановиться на 8 битах для наименьшего элемента в стоимости компьютера?
Мой вопрос может показаться очень глупым, потому что ответ очевиден, но я не очень уверен...
Это потому, что 2^3 позволяет ему идеально соответствовать при обращении к памяти? Электроника специально предназначена для хранения фрагмента из 8 бит? Если да, почему бы не использовать более широкие слова? Это потому, что он делит 32, 64 и 128, так что процессорные слова могут быть даны несколько из этих слов? Это просто удобно иметь 256 значений для такого крошечного пространства?
Как вы думаете?
Мой вопрос слишком метафизический, но я хочу убедиться, что это просто историческая причина, а не технологическая или математическая причина.
Что касается анекдота, я также думал о стандарте ASCII, в котором большинство первых символов бесполезны с такими вещами, как UTF-8, я также пытаюсь придумать немного более короткую и быструю кодировку символов...
10 ответов
Исторически, байты не всегда были 8-битными по размеру (в этом отношении компьютеры также не должны быть двоичными, но недвоичные вычисления видели намного меньше действия на практике). Именно по этой причине в стандартах IETF и ISO часто используется термин " октет" - они не используют байт, потому что они не хотят предполагать, что это означает 8- битный код, а это не так.
Действительно, когда был введен байт, он был определен как 1-6-битная единица. Размеры байт, используемые на протяжении всей истории, включают 7, 9, 36 и машины с байтами переменного размера.
8 была смесью коммерческого успеха, это было достаточно удобное число для людей, думающих об этом (которые могли бы влиться друг в друга), и, без сомнения, другие причины, о которых я совершенно не знаю.
Упомянутый вами стандарт ASCII предполагает наличие 7-битного байта и основан на более ранних 6-битных стандартах связи.
Изменить: Возможно, стоит добавить к этому, так как некоторые настаивают на том, что те, кто говорит, байты всегда октеты, путают байты со словами.
Октет - это имя, данное единице из 8 битов (от латинского "восемь"). Если вы используете компьютер (или на более высоком уровне абстракции, язык программирования), где байты являются 8-битными, то это легко сделать, в противном случае вам понадобится какой-то код преобразования (или вспомогательное оборудование). Концепция октетов в большей степени подходит для сетевых стандартов, чем для локальных вычислений, поскольку будучи независимой от архитектуры, она позволяет создавать стандарты, которые можно использовать при обмене данными между машинами с разными размерами байтов, поэтому его используют в стандартах IETF и ISO (Между прочим, ISO/IEC 10646 использует октет, где стандарт Unicode использует байт для того, что по существу - с некоторыми незначительными дополнительными ограничениями для последней части - тот же стандарт, хотя стандарт Unicode действительно детализирует, что они означают октет за байтом, даже если байты могут быть разные размеры на разных машинах). Концепция октета существует именно потому, что 8-битные байты являются общими (отсюда и выбор их использования в качестве основы таких стандартов), но не универсальными (отсюда и необходимость в другом слове, чтобы избежать двусмысленности).
Исторически, байт был размером, используемым для хранения символа, что, в свою очередь, основывается на практиках, стандартах и фактических стандартах, которые предшествовали компьютерам, используемым для телекса и других методов связи, начиная, возможно, с Бодо в 1870 году (я не не знаю о каких-либо ранее, но я открыт для исправлений).
Это отражается в том факте, что в C и C++ модуль для хранения байта называется char
чей размер в битах определяется CHAR_BIT
в стандартном заголовке limit.h Различные машины будут использовать 5,6,7,8,9 или более бит для определения символа. В наши дни, конечно, мы определяем символы как 21-битные и используем разные кодировки для хранения их в 8-, 16- или 32-битных единицах (и не разрешенных Unicode способах, таких как UTF-7 для других размеров), но исторически это было так оно и было.
В языках, которые стремятся быть более согласованными между машинами, а не отражать архитектуру машины, byte
как правило, фиксируется в языке, и в наши дни это обычно означает, что он определен в языке как 8-битный. Учитывая точку в истории, когда они были сделаны, и что большинство машин теперь имеют 8-битные байты, различие в значительной степени спорное, хотя это не невозможно реализовать компилятор, во время выполнения, и т.д. для таких языков, на машинах с разными размерами байты, просто не так просто.
Слово - это "естественный" размер для данного компьютера. Это менее четко определено, поскольку оно затрагивает несколько совпадающих проблем, которые обычно совпадают, но могут и не быть. Большинство регистров на машине будут такого размера, но некоторые не могут. Наибольший размер адреса обычно был бы словом, хотя это может быть и не так (Z80 имел 8-битный байт и 1-байтовое слово, но допускал некоторое удвоение регистров, чтобы обеспечить некоторую 16-битную поддержку, включая 16-битную адресации).
Снова мы видим здесь разницу между C и C++, где int
определяется с точки зрения размера слова и long
будучи определенным, чтобы использовать преимущества процессора, который имеет концепцию "длинного слова", если таковой существует, хотя, возможно, в данном случае он идентичен int
, Минимальное и максимальное значения снова находятся в заголовке limit.h. (Действительно, с течением времени, int
может быть определено как меньший, чем естественный размер слова, как комбинация согласованности с тем, что обычно встречается в других местах, сокращение использования памяти для массива целых чисел и, возможно, другие проблемы, о которых я не знаю).
Языки Java и.NET используют подход определения int
а также long
как исправлено во всех architecutres, а также устранение различий как проблемы для среды выполнения (особенно JITter). Примечательно, что даже в.NET размер указателя (в небезопасном коде) будет варьироваться в зависимости от архитектуры, которая будет являться базовым размером слова, а не навязанным языком размером слова.
Следовательно, октет, байт и слово все очень независимы друг от друга, несмотря на то, что отношение октет == байт и слово представляет собой целое число байтов (и целое двоичное число, такое как 2, 4, 8 и т. Д.), Являющееся общим сегодня.
Не все байты 8 бит. Некоторые из них 7, некоторые 9, некоторые другие значения полностью. Причина 8 важна в том, что в большинстве современных компьютеров это стандартное число бит в байте. Как упомянул Никола, бит - это фактическая наименьшая единица (одно двоичное значение, истина или ложь).
Как уже упоминалось, эта статья http://en.wikipedia.org/wiki/Byte описывает байт и его историю переменного размера более подробно.
Общая причина, почему 8, 256 и другие числа важны, состоит в том, что они имеют степень 2, и компьютеры работают с использованием системы коммутаторов base-2 (двоичная).
Кодирование ASCII требует 7 бит, а EBCDIC - 8 бит. Расширенные коды ASCII (такие как наборы символов ANSI) использовали 8-й бит для расширения набора символов с помощью графики, акцентированных символов и других символов. Некоторые архитектуры использовали собственные кодировки; Хорошим примером этого является DEC PDP-10, который имел 36-битное машинное слово. Некоторые операционные системы в этой архитектуре использовали упакованные кодировки, которые сохраняли 6 символов в машинном слове для различных целей, таких как имена файлов.
К 1970-м годам успех DG Nova и DEC PDP-11, представляющих собой 16-битные архитектуры и мэйнфреймы IBM с 32-битными машинными словами, подтолкнул индустрию к 8-битному символу по умолчанию. 8-битные микропроцессоры конца 1970-х годов были разработаны в этой среде, и это стало стандартом де-факто, особенно в связи с тем, что готовые периферийные устройства, такие как UART, микросхемы ПЗУ и микросхемы FDC, создавались как 8-битные устройства.
Ко второй половине 1970-х годов индустрия утвердилась в 8-битном стандарте де-факто, и архитектуры, такие как PDP-8 с его 12-битным машинным словом, стали несколько маргинальными (хотя PDA-8 ISA и его производные по-прежнему появляются во встроенных продуктах sytem).). 16 и 32-битные микропроцессоры, такие как семейства Intel 80x86 и MC68K, последовали.
Компьютеры построены на цифровой электронике, а цифровая электроника работает с государствами. Один фрагмент может иметь 2 состояния, 1 или 0 (если напряжение выше некоторого уровня, то оно равно 1, если нет, то оно равно нулю). Чтобы представить такое поведение, была введена бинарная система (хорошо не представленная, но широко принятая).
Итак, мы подошли к доле. Бит - самый маленький фрагмент в двоичной системе. Может принимать только 2 состояния, 1 или 0, и представляет атомный фрагмент всей системы.
Для облегчения нашей жизни был введен байт (8 бит). Чтобы привести некоторую аналогию, мы не выражаем вес в граммах, но это базовая мера веса, но мы используем килограммы, потому что это проще в использовании и понимает использование. Один килограмм - это 1000 граммов, и это может быть выражено как 10 на степень 3. Поэтому, когда мы возвращаемся к двоичной системе и используем ту же мощность, мы получаем 8 ( 2 на степень 3 равно 8). Это было сделано, потому что использование только битов было слишком сложным в повседневной работе.
Это продолжалось, поэтому в будущем, когда мы поняли, что 8 байтов снова слишком малы и усложнились в использовании, мы добавили +1 к степени (2 к степени 4 равно 16), а затем снова 2^5 равно 32 и так далее, и 256 это просто 2 на 8.
Итак, ваш ответ: мы следуем бинарной системе из-за архитектуры компьютеров, и мы повышаем ценность способности представлять, получая некоторые значения, с которыми мы можем просто справляться каждый день, и именно так вы переходите от бита к байту. (8 бит) и так далее!
(2, 4, 8, 16, 32, 64, 128, 256, 512, 1024 и т. Д.) (2 ^ x, x = 1,2,3,4,5,6,7,8,9, 10 и тд)
Поскольку компьютеры работают с двоичными числами, важны все степени двух.
8-битные числа могут представлять 256 (2^8) различных значений, достаточно для всех символов английского языка и довольно много дополнительных. Это сделало цифры 8 и 256 довольно важными.
Тот факт, что многие процессоры (раньше и до сих пор) обрабатывали данные в 8-битной системе, очень помог.
Другие важные силы двух, о которых вы, возможно, слышали: 1024 (2^10=1k) и 65536 (2^16=65k).
Важное число здесь является двоичным 0
или же 1
, Все остальные ваши вопросы связаны с этим.
Клод Шеннон и Джордж Буль проделали фундаментальную работу над тем, что мы сейчас называем теорией информации и булевой арифметикой. Короче говоря, это основа того, как цифровой коммутатор, с возможностью только представлять 0 OFF
а также 1 ON
может представлять более сложную информацию, такую как числа, логика и фото JPG. Двоичные являются основой компьютеров, какими мы их знаем в настоящее время, но вполне возможны другие компьютеры с числовой базой или аналоговые компьютеры.
В десятичной арифметике человека значения десяти имеют значение. 10, 100, 1000, 10000 кажутся важными и полезными. Как только у вас есть компьютер, основанный на двоичном коде, также становятся важными степени 2. 2^8 = 256 достаточно для алфавита, знаков препинания и управляющих символов. (Что еще более важно, 2^7 достаточно для алфавита, знаков препинания и управляющих символов, а 2 ^ 8 достаточно для этих символов ASCII и контрольного бита.)
Чарльз Петцольд написал интересную книгу под названием " Код", которая охватывает именно этот вопрос. Смотрите главу 15, Байты и шестнадцатеричные.
Цитаты из этой главы:
Восемь битовых значений являются входами сумматоров, защелок и селекторов данных, а также выходами этих блоков. Восьмиразрядные значения также определяются переключателями и отображаются лампочками. Таким образом, путь данных в этих цепях, как говорят, имеет ширину 8 бит. Но почему 8 бит? Почему не 6 или 7 или 9 или 10?
... на самом деле нет причин, почему он должен был быть построен таким образом. Восемь битов в то время казались удобными, милыми, если хотите.
... Некоторое время под байтом подразумевалось просто число битов в конкретном пути данных. Но к середине 1960-х гг. в связи с разработкой IBM System/360 (их большого комплекса бизнес-компьютеров) слово стало означать группу из 8 битов.
... Одной из причин, по которой IBM тяготеет к 8-битным байтам, является простота хранения чисел в формате, известном как BCD. Но, как мы увидим в следующих главах, совершенно случайно, что байт идеально подходит для хранения текста, потому что большинство письменных языков по всему миру (за исключением иероглифов, используемых на китайском, японском и корейском языках) может быть представлено менее чем 256 персонажи.
Я считаю, что основная причина связана с оригинальным дизайном IBM PC. Процессор Intel 8080 был первым предшественником 8086, который впоследствии будет использоваться в IBM PC. У него были 8-битные регистры. Таким образом, вокруг 8-битной метафоры была разработана целая экосистема приложений. Чтобы сохранить обратную совместимость, Intel разработала все последующие архитектуры для сохранения 8-битных регистров. Таким образом, процессоры 8086 и все x86 после этого сохранили свои 8-битные регистры для обратной совместимости, даже несмотря на то, что они добавляли новые 16-битные и 32-битные регистры на протяжении многих лет.
Другая причина, которую я могу придумать, состоит в том, что 8 бит идеально подходят для подгонки базового латинского набора символов. Вы не можете вписать его в 4 бита, но вы можете в 8. Таким образом, вы получите всю 256-значную кодировку ASCII. Это также наименьшая степень 2, для которой у вас достаточно битов, в которые вы можете поместить набор символов. Конечно, в наши дни большинство наборов символов имеют ширину 16 бит (то есть Unicode).
Мы обычно считаем в базе 10, одна цифра может иметь одно из десяти различных значений. Компьютерная технология основана на переключателях (микроскопических), которые могут быть включены или выключены. Если один из них представляет собой цифру, эта цифра может быть 1 или 0. Это основание 2.
Отсюда следует, что компьютеры работают с числами, которые составлены в виде последовательности из двух цифр значения.
- 1 цифра,2 значения
- 2 цифры, 4 значения
- 3 цифры, 8 значений и т. Д.
Когда процессоры спроектированы, им нужно выбрать размер, с которым процессор будет оптимизирован для работы. Для процессора это считается "словом". Ранее процессоры были основаны на размерах слова в четыре бита и вскоре после 8 бит (1 байт). Сегодня процессоры в основном предназначены для работы с 32-битными и 64-битными словами. Но на самом деле, "переключение" из двух состояний - это то, почему все номера компьютеров имеют степень 2.
Исторические причины, я полагаю. 8 - это степень 2, 2^2 - это 4, а 2^4 = 16 - это слишком мало для большинства целей, а 16-битное (следующая степень двух) аппаратное обеспечение появилось намного позже.
Но главная причина, я подозреваю, заключается в том, что они имели 8-битные микропроцессоры, затем 16-битные микропроцессоры, слова которых вполне могли бы быть представлены в виде 2 октетов, и так далее. Вы знаете, исторический беспорядок и обратная совместимость и т. Д.
Другая, так же прагматичная причина против "уменьшения": если бы мы, скажем, использовали 4 бита в качестве одного слова, мы бы в основном получили только половину трудоемкости по сравнению с 8 битами. Помимо переполнения гораздо быстрее.
Вы всегда можете сжать, например, 2 числа в диапазоне 0..15 в одном октете... вам просто нужно извлечь их вручную. Но если у вас нет, например, миллиардов наборов данных, которые нужно хранить в памяти рядом, это не стоит усилий.