Почему 8 и 256 такие важные цифры в компьютерных науках?

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

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

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

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

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

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

19
задан Jon Hanna 9 August 2010 в 00:09
поделиться

10 ответов

Исторически сложилось так, что байты не всегда были размером 8 бит (в этом отношении компьютеры тоже не обязательно должны быть двоичными, но на практике небинарные вычисления выполнялись гораздо реже). Именно по этой причине стандарты IETF и ISO часто используют термин октет - они не используют байт , потому что не хотят предполагать, что это означает 8-бит, когда это не так. т.

Действительно, когда был создан байт , он был определен как 1-6-битная единица. Размеры байтов, используемые на протяжении всей истории, включают 7, 9, 36 и машины с байтами переменного размера.

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

Упомянутый вами стандарт ASCII предполагает 7-битный байт и был основан на более ранних 6-битных стандартах связи.


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

Октет - это имя, присвоенное блоку из 8 бит (от латинского «восемь»). Если вы используете компьютер (или язык программирования с более высоким уровнем абстракции), где байты являются 8-битными, то это легко сделать, иначе вам понадобится код преобразования (или аппаратное обеспечение).Концепция октета больше используется в сетевых стандартах, чем в локальных вычислениях, поскольку, будучи архитектурно-нейтральной, она позволяет создавать стандарты, которые могут использоваться при обмене данными между машинами с разными размерами байтов, следовательно, ее использование в стандартах IETF и ISO (кстати, ISO / IEC 10646 использует октет , где в стандарте Unicode используется байт для того, что по сути - с некоторыми незначительными дополнительными ограничениями в последней части - тот же стандарт , хотя в стандарте Unicode подробно указано, что они означают октет на байт , хотя байты могут иметь разный размер на разных машинах). Концепция октета существует именно потому, что 8-битные байты являются общими (отсюда и выбор использования их в качестве основы для таких стандартов), но не универсальными (отсюда необходимость в другом слове, чтобы избежать двусмысленности).

Исторически байт был размером, используемым для хранения символа, что, в свою очередь, основывается на практике, стандартах и ​​фактических стандартах, которые предшествовали компьютерам, использовавшимся для телекса и других методов связи, начиная, возможно, с Бодо в 1870 году. (Я не знаю, что было раньше, но открыт для исправлений).

Это отражено в том, что в C и C ++ блок для хранения байта называется char , размер которого в битах определяется CHAR_BIT в стандартном заголовке limits.h . Разные машины будут использовать 5,6,7,8,9 или более бит для определения символа.В наши дни, конечно, мы определяем символы как 21-битные и используем разные кодировки для их хранения в 8-, 16- или 32-битных единицах (и не санкционированные Unicode способы, такие как UTF-7 для других размеров), но исторически это было как это было.

В языках, которые стремятся быть более согласованными между машинами, а не отражать машинную архитектуру, байт имеет тенденцию фиксироваться в языке, и в наши дни это обычно означает, что он определяется в языке как 8 -немного. Учитывая исторический момент, когда они были созданы, и то, что большинство машин теперь имеют 8-битные байты, различие в значительной степени спорно, хотя вполне возможно реализовать компилятор, среду выполнения и т. Д. Для таких языков на машинах с разным размером. байтов, просто не так просто.

Слово - это «естественный» размер для данного компьютера. Это менее четко определено, поскольку затрагивает несколько дублирующих друг друга проблем, которые обычно совпадают, но могут не совпадать. Большинство регистров на машине будут иметь этот размер, но некоторые могут и не быть. Наибольшим размером адреса обычно является слово, хотя это может быть не так (Z80 имел 8-битный байт и 1-байтовое слово, но допускал некоторое удвоение регистров, чтобы обеспечить некоторую поддержку 16-бит, включая 16-битное слово). адресация).

Здесь мы снова видим разницу между C и C ++, где int определяется в терминах размера слова, а long определяется для использования процессора, который имеет «long Слово "понятие" должно существовать, хотя в данном случае оно, возможно, идентично int . Минимальное и максимальное значения снова находятся в заголовке limits.h.(Действительно, по прошествии времени int можно определить как меньший, чем естественный размер слова, как комбинацию согласованности с тем, что распространено в других местах, сокращение использования памяти для массива целых чисел и возможно, другие проблемы, о которых я не знаю).

Языки Java и .NET используют подход, определяющий int и long как фиксированные для всех архитекторов, и устранение различий становится проблемой для среды выполнения (особенно JITter). иметь дело с. Примечательно, однако, что даже в .NET размер указателя (в небезопасном коде)будет варьироваться в зависимости от архитектуры, чтобы быть основным размером слова, а не размером слова, установленным языком.

Следовательно, октет, байт и слово очень независимы друг от друга, несмотря на то, что отношение октет == байт и слово является целым числом байтов (и целым округленным двоичным числом, таким как 2, 4, 8 и т. Д.) ) сегодня обычное дело.

12
ответ дан 30 November 2019 в 03:33
поделиться

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

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

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

2
ответ дан 30 November 2019 в 03:33
поделиться

Компьютеры основаны на цифровой электронике, а цифровая электроника работает с состояниями. Один фрагмент может иметь 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 и т. д.)

3
ответ дан 30 November 2019 в 03:33
поделиться

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

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

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

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

0
ответ дан 30 November 2019 в 03:33
поделиться

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

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

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

9
ответ дан 30 November 2019 в 03:33
поделиться

Для кодирования ASCII требуется 7 бит, а для EBCDIC - 8 бит. В расширенных кодах ASCII (таких как наборы символов ANSI) 8-й бит использовался для расширения набора символов графикой, акцентированными символами и другими символами. В некоторых архитектурах использовались проприетарные кодировки; Хорошим примером этого является DEC PDP-10, в котором было 36-битное машинное слово. Некоторые операционные системы на этой архитектуре использовали упакованные кодировки, в которых хранятся 6 символов в машинном слове для различных целей, таких как имена файлов.

К 1970-м годам успех D.G. Nova и DEC PDP-11, представлявшие собой 16-битную архитектуру и мэйнфреймы IBM с 32-битными машинными словами, подталкивали отрасль к использованию 8-битных символов по умолчанию. В этой среде были разработаны 8-битные микропроцессоры конца 1970-х годов, и они стали стандартом де-факто, особенно когда готовые периферийные устройства, такие как UART, микросхемы ROM и микросхемы FDC, строились как 8-битные устройства.

К концу 1970-х годов индустрия остановилась на 8-битном стандарте де-факто, и такие архитектуры, как PDP-8 с его 12-битным машинным словом, стали несколько маргинальными (хотя PDP-8 ISA и его производные все еще появляются в встроенные системные продукты).Затем последовали разработки 16- и 32-разрядных микропроцессоров, такие как семейства Intel 80x86 и MC68K.

5
ответ дан 30 November 2019 в 03:33
поделиться

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

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

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

3
ответ дан 30 November 2019 в 03:33
поделиться

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

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

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

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

1
ответ дан 30 November 2019 в 03:33
поделиться

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

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

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

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

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

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

1
ответ дан 30 November 2019 в 03:33
поделиться

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

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

1
ответ дан 30 November 2019 в 03:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: