Почему 8 и 256 такие важные цифры в компьютерных науках? - PullRequest
19 голосов
/ 08 августа 2010

Я не очень хорошо знаю об архитектуре RAM и HDD или о том, как электроника справляется с частями памяти, но это всегда вызывало у меня любопытство: почему мы решили остановиться на 8 битах для наименьшего элемента в стоимости компьютера?

Мой вопрос может показаться очень глупым, потому что ответ очевиден, но я не очень уверен ...

Это потому, что 2 ^ 3 позволяет ему идеально соответствовать при обращении к памяти?Электроника специально предназначена для хранения фрагмента из 8 бит?Если да, почему бы не использовать более широкие слова?Это потому, что он делит 32, 64 и 128, так что процессорные слова могут быть даны несколько из этих слов?Разве удобно иметь значение 256 для такого крошечного пространства?

Как вы думаете?

Мой вопрос слишком метафизичен, но я хочу убедиться, что это просто историческая причинаа не технологическая или математическая причина.

Для анекдота я также думал о стандарте ASCII, в котором большинство первых символов бесполезны с такими вещами, как UTF-8, я также пытаюсь думатьо более крошечной и быстрой кодировке символов ...

Ответы [ 10 ]

12 голосов
/ 08 августа 2010

Исторически, байты не всегда были 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 и т. д.), распространено сегодня.

9 голосов
/ 08 августа 2010

Не все байты являются 8 битами.Некоторые из них 7, некоторые 9, некоторые другие значения полностью.Причина 8 важна в том, что в большинстве современных компьютеров это стандартное число бит в байте.Как упоминал Никола, бит - это фактическая наименьшая единица (одно двоичное значение, true или false).

Как будет упомянуто, эта статья http://en.wikipedia.org/wiki/Byte описывает байт и его историю переменного размеранемного подробнее.

Общая причина того, почему 8, 256 и другие числа важны, состоит в том, что они имеют степень 2, а компьютеры работают с использованием системы двоичных коммутаторов base-2.

5 голосов
/ 08 августа 2010

Для кодирования 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-битным машинным словом, стали несколько маргинализованными (хотя ISA и производные PDP-8все еще появляются во встроенных продуктах системы).16 и 32-битные микропроцессоры, такие как семейства Intel 80x86 и MC68K.

3 голосов
/ 08 августа 2010

Компьютеры построены на цифровой электронике, а цифровая электроника работает с состояниями. Один фрагмент может иметь 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, х = 1,2,3,4,5,6,7,8,9,10 и т. д.)

3 голосов
/ 08 августа 2010

Поскольку компьютеры работают с двоичными числами, важны все степени двух.

8-битные числа могут представлять 256 (2 ^ 8) различных значений, что достаточно для всех символов английского языка и довольно много дополнительных. Это сделало цифры 8 и 256 весьма важными.
Тот факт, что многие процессоры (раньше и до сих пор) обрабатывали данные в 8-битной системе, очень помог.

Другие важные силы двух, о которых вы, возможно, слышали: 1024 (2 ^ 10 = 1k) и 65536 (2 ^ 16 = 65k).

2 голосов
/ 08 августа 2010

Важное число здесь - двоичное 0 или 1. Все остальные ваши вопросы связаны с этим.

Клод Шеннон и Джордж Буль проделал фундаментальную работу над тем, что мы сейчас называем теорией информации и булевой арифметикой. Короче говоря, это основа того, как цифровой коммутатор, обладающий только способностью представлять 0 OFF и 1 ON, может представлять более сложную информацию, такую ​​как числа, логика и фотография jpg. Двоичные являются основой компьютеров, какими мы их знаем в настоящее время, но вполне возможны другие компьютеры с числовой базой или аналоговые компьютеры.

В десятичной арифметике человека значения десяти имеют значение. 10, 100, 1000, 10000 кажутся важными и полезными. Как только у вас есть компьютер, основанный на двоичном коде, также становятся важными степени 2. 2 ^ 8 = 256 достаточно для алфавита, знаков препинания и управляющих символов. (Что еще более важно, 2 ^ 7 достаточно для алфавита, знаков пунктуации и управляющих символов, а 2 ^ 8 достаточно для этих символов ASCII и контрольный бит .)

1 голос
/ 09 августа 2010

Чарльз Петцольд написал интересную книгу под названием Код , которая охватывает именно этот вопрос.См. Главу 15 «Байты и шестнадцатеричные значения».

Цитаты из этой главы:

Восемь битовых значений являются входами сумматоров, защелок и селекторов данных, а также выходами из этих блоков.Восьмиразрядные значения также определяются переключателями и отображаются лампочками. Таким образом, путь данных в этих цепях называется 8 бит шириной .Но почему 8 бит?Почему не 6 или 7, или 9, или 10?

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

... Некоторое время байт означал просто число битов в конкретном пути данных.Но к середине 1960-х гг.в связи с разработкой IBM System / 360 (их большого комплекса бизнес-компьютеров) слово стало означать группу из 8 битов.

... Одной из причин, по которой IBM тяготеет к 8-битным байтам, былапростота хранения чисел в формате, известном как BCD.Но, как мы увидим в следующих главах, совершенно случайно, что байт идеально подходит для хранения текста, потому что большинство письменных языков по всему миру (за исключением иероглифов, используемых на китайском, японском и корейском языках) может быть представлено менее чем 256символы.

1 голос
/ 08 августа 2010

Обычно мы считаем в базе 10, одна цифра может иметь одно из десяти различных значений. Компьютерная технология основана на переключателях (микроскопических), которые могут быть включены или выключены. Если один из них представляет собой цифру, эта цифра может быть либо 1, либо 0. Это основание 2.

Отсюда следует, что компьютеры работают с числами, которые составлены в виде последовательности из 2 цифр.

  • 1 цифра, 2 значения
  • 2 цифры, 4 значения
  • 3 цифры, 8 значений и т. Д.

Когда процессоры спроектированы, им нужно выбрать размер, с которым процессор будет оптимизирован для работы. Для процессора это считается «словом». Ранее процессоры были основаны на размерах слова в четыре бита и вскоре после 8 бит (1 байт). Сегодня процессоры в основном предназначены для работы с 32-битными и 64-битными словами. Но на самом деле, «переключение» из двух состояний - это то, почему все номера компьютеров имеют степень 2. 2. 1013 *

1 голос
/ 08 августа 2010

Я полагаю, что основная причина связана с оригинальным дизайном IBM PC. Процессор Intel 8080 был первым предшественником 8086 , который впоследствии будет использоваться в IBM PC . У него были 8-битные регистры. Таким образом, вокруг 8-битной метафоры была разработана целая экосистема приложений. Чтобы сохранить обратную совместимость, Intel разработала все последующие архитектуры для сохранения 8-битных регистров. Таким образом, 8086 и все процессоры x86 после этого сохранили свои 8-битные регистры для обратной совместимости, даже несмотря на то, что они добавили новые 16-битные и 32-битные регистры на протяжении многих лет.

Другая причина, по которой я могу придумать, состоит в том, что 8 бит идеально подходят для подгонки базового набора латинских символов. Вы не можете вписать его в 4 бита, но вы можете в 8. Таким образом, вы получите всю 256-значную кодировку ASCII. Это также наименьшая степень 2, для которой у вас достаточно битов, в которые вы можете поместить набор символов. Конечно, в наши дни большинство наборов символов имеют ширину 16 бит (т.е. Unicode).

0 голосов
/ 08 августа 2010

Исторические причины, я полагаю. 8 - это степень 2, 2 ^ 2 - это 4, а 2 ^ 4 = 16 - это слишком мало для большинства целей, а 16-битное (следующая степень двух) аппаратное обеспечение появилось намного позже.

Но главная причина, я подозреваю, заключается в том, что они имели 8-битные микропроцессоры, затем 16-битные микропроцессоры, слова которых вполне могли бы быть представлены в виде 2 октетов, и так далее. Вы знаете, исторический беспорядок и обратная совместимость и т. Д.

Еще одна, аналогично прагматичная причина против «уменьшения»: если бы мы, скажем, использовали 4 бита в качестве одного слова, мы бы в основном получили только половину трудоемкости по сравнению с 8 битами. Помимо переполнения намного быстрее.

Вы всегда можете сжать, например, 2 числа в диапазоне 0..15 в одном октете ... вы просто должны извлечь их вручную. Но если у вас нет, например, миллиардов наборов данных, которые нужно хранить в памяти бок о бок, это не стоит усилий.

...