Почему 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 и машины с переменным размером байт.
стандарт ASCII, который вы упомянули, предполагает 7-битный байт и был основан на более ранних 6-битных стандартах связи.
Edit: возможно, стоит добавить к этому, как некоторые настаивают на том, что те, кто говорит, что байты всегда октеты, путают байты со словами.
An октет - это имя, данное единице из 8 бит (от латинского-восемь). Если вы используете компьютер (или на более высоком уровне абстракции, язык программирования), где байты 8-битные, то это легко сделать, иначе вам нужен код преобразования (или покрытие в аппаратном обеспечении). Понятие октет приходит вверх Больше в стандартах сети чем в местном вычислительная техника, потому что будучи архитектурно-нейтральной, она позволяет создавать стандарты, которые могут использоваться для связи между машинами с разными размерами байтов, поэтому ее использование в стандартах IETF и ISO (кстати, ISO/IEC 10646 использует октет где стандарт Unicode использует байт для того, что по существу - с некоторыми незначительными дополнительными ограничениями на последней части-тот же стандарт, хотя стандарт Unicode делает детали, что они означают октет by байт даже если байты могут быть различных размеров на разных машинах). Понятие октет существует именно потому, что 8-битные байты являются общими (отсюда выбор их использования в качестве основы таких стандартов), но не универсальными (отсюда необходимость другого слова, чтобы избежать двусмысленности).
исторически байт был размером, используемым для хранения символа, что, в свою очередь, основывается на практике, стандартах и стандартах де-факто какие предварительные компьютеры использовались для телекса и других методов связи, начиная, возможно, с Бодо в 1870 году (я не знаю ни одного ранее, но открыт для исправлений).
это отражается в том, что в C и c++ единица хранения байта называется char
размер которого в битах определяется CHAR_BIT
в границах нормы.заголовок сек. Различные машины будут использовать 5,6,7,8,9 или более бит для определения символа. В эти дни, конечно, мы определяем символы как 21-битные и используем различные кодировки для хранения их в 8 -, 16-или 32-битных единицах (и не авторизованные способы Unicode, такие как UTF-7 для других размеров), но исторически так было.
в языках, которые стремятся быть более согласованными между машинами, а не отражать архитектуру машины, byte
имеет тенденцию фиксироваться на языке, и в наши дни это обычно означает, что он определяется на языке как 8-битный. Учитывая точку в истории, когда они были сделаны, и что большинство машин теперь имеют 8-битные байты, различие в основном спорное, хотя не невозможно реализовать компилятор, время выполнения и т. д. для таких языков на машинах с байтами разного размера, просто не так просто.
слово "естественный" размер для данного компьютера. Это менее четко, потому что он влияет на несколько перекрывающихся опасения, что, как правило, coïncide, но не может. Большинство регистров на машине будут такого размера, но некоторые могут и не быть. Самый большой размер адреса обычно будет word, хотя это может быть не так (Z80 имел 8-битный байт и 1-байтовое слово, но позволил некоторому удвоению регистров дать некоторую 16-битную поддержку, включая 16-битную адресацию).
снова мы видим здесь разницу между C и C++, где int
определяется в терминах размера слова и long
определяется, чтобы воспользоваться процессором, который имеет концепцию "длинного слова", если таковой существует, хотя, возможно, идентичен в данном случае int
. Минимальное и максимальное значения снова в пределах.заголовок сек. (Действительно, с течением времени,int
может быть определен как меньший, чем естественный размер слова, как комбинация согласованности с тем, что обычно в других местах, сокращение использования памяти для массива ints и, вероятно, другие проблемы, о которых я не знаю).
языки Java и .NET используют подход определения int
и long
как исправлено во всех архитектурах и делает работу с различиями проблемой для среды выполнения (особенно Джиттер). Примечательно, что даже в .NET размер указателя (в небезопасном коде) будет варьироваться в зависимости от архитектуры, которая будет базовым размером слова, а не размером слова, наложенным языком.
следовательно, октет, байт и слово очень независимы друг от друга, несмотря на отношение октета == байт и слово, являющееся целым числом байтов (и целым двоичным круглым числом, таким как 2, 4, 8 и т. д.) быть обычным сегодня.
Не все байты 8 бит. Некоторые 7 некоторые 9, некоторые другие ценности совсем. Причина 8 важна в том, что в большинстве современных компьютеров это стандартное количество бит в байте. Как упоминал Никола, бит-это фактическая наименьшая единица (одно двоичное значение, true или false).
Как уже упоминалось, эта статья http://en.wikipedia.org/wiki/Byte описывает байт и его историю с переменным размером более подробно.
общие рассуждения почему 8, 256 и другие числа важны, так это то, что они являются степенями 2, а компьютеры работают с использованием базовой (двоичной) системы коммутаторов.
кодировка 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-х годов были разработаны в этой среде, и это стало стандартом де-факто, в частности, как оффшорные периферийные корабли, такие как UARTs, чипы ROM и чипы FDC строились как 8-битные устройства.
в последней части в 1970-х годах промышленность остановилась на 8 битах в качестве стандарта де-факто, и архитектуры, такие как PDP-8 с его 12-битным машинным словом, стали несколько маргинальными (хотя PDP-8 ISA и производные все еще появляются во встроенных продуктах sytem). 16 и 32-разрядные микропроцессорные конструкции, такие как семейства Intel 80x86 и MC68K.
поскольку компьютеры работают с двоичными числами, все степени двух важны.
8-битные числа могут представлять 256 (2^8) различных значений, достаточно для всех символов английского языка и довольно много дополнительных. Это делало числа 8 и 256 очень важными.
Тот факт, что многие процессоры (используемые и до сих пор) обрабатывают данные в 8bit, очень помог.
другие важные полномочия двух вы, возможно, слышали о 1024 (2^10=1k) и 65536 (2^16=65k).
компьютеры построены на цифровой электронике, и цифровая электроника работает с государствами. Один фрагмент может иметь 2 состояния, 1 или 0 (если напряжение выше некоторого уровня, то оно равно 1, если нет, то оно равно нулю). Для представления этого поведения была введена двоичная система (хорошо не введена, но широко принята).
Итак, мы подходим к бит. Бит-самый маленький фрагмент в двоичной системе. Он может принимать только 2 состояния, 1 или 0, и он представляет собой атомарный фрагмент целого система.
чтобы облегчить нашу жизнь, был введен байт (8 бит). Чтобы дать U некоторую аналогию, мы не выражаем вес в граммах, но это базовая мера веса, но мы используем килограммы, потому что легче использовать и понимать использование. Один килограмм-это 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 и так далее)
важное число здесь двоичное 0
или 1
. Все ваши вопросы связаны с этим.
Клод Шеннон и Джордж Буль проделал фундаментальную работу над тем, что мы теперь называем теорией информации и булевой арифметикой. Короче говоря, это основа того, как цифровой коммутатор, имея только возможность представлять 0 OFF
и 1 ON
может представлять более сложную информацию, такую как числа, логика и jpg фото. Двоичный основе компьютеры, как мы их знаем в настоящее время, но другие компьютеры с числовой базой или аналоговые компьютеры полностью возможны.
в человеческой десятичной арифметике десятичные степени имеют значение. 10, 100, 1000, 10 000 кажутся важными и полезными. Как только у вас есть компьютер, основанный на двоичном, есть полномочия 2, Также, которые становятся важными. 2^8 = 256 достаточно для алфавита, знаки препинания и управляющие символы. (Что еще более важно, 2^7 достаточно для алфавита, пунктуации и контроля символы и 2^8 достаточно места для этих символов ASCII и бит проверки.)
мы обычно считаем в базе 10, одна цифра может иметь одно из десяти различных значений. Компьютерная технология основана на переключателях (микроскопических) которые могут быть или включено-выключено. Если один из них представляет цифру, эта цифра может быть либо 1, либо 0. Это база 2.
из этого следует, что компьютеры работают с числами, которые строятся как серия из 2 цифр.
- 1 цифра,2 значения
- 2 цифры, 4 значения
- 3 цифры, 8 ценностей и т. д.
когда процессоры разработаны, они должны выбрать размер, с которым процессор будет оптимизирован для работы. Для CPU это считается "словом". Более ранние процессоры были основаны на размерах слов fourbits и вскоре после 8 бит (1 байт). Сегодня процессоры в основном предназначены для работы с 32-битными и 64-битными словами. Но на самом деле, два состояния "переключаются", поэтому все компьютерные номера имеют тенденцию быть степенями 2.
Я считаю, что основная причина связана с оригинальным дизайном IBM PC. Процессор Intel 8080 был первый предшественник 8086 позже используется в IBM PC. Он имел 8-битные регистры. Таким образом, вокруг 8-битной метафоры была разработана целая экосистема приложений. Чтобы сохранить обратную совместимость, Intel разработала все последующие архитектуры для сохранения 8-битных регистров. Таким образом, 8086 и все процессоры x86 после этого сохранили свой 8-бит регистры для обратной совместимости, хотя они добавили новые 16-битные и 32-битные регистры на протяжении многих лет.
другая причина, о которой я могу думать, это 8 бит, идеально подходит для установки базового набора латинских символов. Вы не можете поместить его в 4 бита, но вы можете в 8. Таким образом, вы получаете всю 256-значную кодировку ASCII. Это также наименьшая мощность 2, для которой у вас достаточно битов, в которые вы можете поместить набор символов. Конечно, в наши дни большинство наборов символов на самом деле имеют 16-битную ширину (т. е. Юникод.)
Чарльз Петцольд написал интересную книгу под названием код, который охватывает именно этот вопрос. См. Главу 15, байты и Hex.
цитаты из этой главы:
восемь бит являются входами сумматоры, защелки и селекторы данных , а также выходы из этих блоков. Восьмиразрядные значения также определяются переключатели и отображаются лампочками, Путь данных в этих схемах так сказано 8 бит. Но почему 8 бит? Почему не 6 или 7 или 9 или 10?
... на самом деле нет причин. он должен был быть построен таким образом. Восемь биты просто казались в то время удобное количество, хороший битфул кусочки, если хотите.
...Какое-то время байт означал просто количество битов в конкретном путь данных. Но к середине 1960-х. в связи с развитием IBM System / 360 (их большой комплекс бизнес-компьютеров), слово пришло в смысле группа из 8 бит.
... Одна из причин, по которой IBM тяготела к 8-битные байты были простотой в хранении числа в формате, известном как кор. Но, как мы увидим в следующих главах, совершенно случайно байт идеально подходит для хранения текста, потому что большинство письменные языки мира (за исключением иероглифов использованный в китайском, японском и корейском) может быть представлено менее 256 письмена.
исторические причины, я полагаю. 8-это мощность 2, 2^2 - это 4, а 2^4 = 16-слишком мало для большинства целей, а 16 (следующая мощность двух) - битное оборудование появилось намного позже.
но основная причина, я подозреваю, заключается в том, что у них были 8-битные микропроцессоры, затем 16-битные микропроцессоры, слова которых вполне могли быть представлены в виде 2 октетов и так далее. Вы знаете, исторический cruft и обратная совместимость и т. д.
другая, аналогично прагматическая причина против "масштабирование": если бы мы, скажем, использовали 4 бита как одно слово, мы бы в основном получили только половину troughtput по сравнению с 8 битами. Помимо переполнения много быстрее.
вы всегда можете сжать, например, 2 числа в диапазоне 0..15 в октете... вы просто должны извлечь их вручную. Но если у вас нет, например, газиллионов наборов данных для хранения в памяти бок о бок, это не стоит усилий.