Является ли степень двух бит на слово «удобной»? Если это так, то почему?

11

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

Из какой истории почему байты восемь бит? мы читаем в утвержденном ответе:

Бинарные компьютеры побуждают дизайнеров делать размеры двух степеней.

Хорошо, но почему? В том же вопросе, но в поле комментария для вопроса, я нахожу:

Последнее предложение в шутку? 12-битный байт был бы неудобен, потому что это не степень 2. - robjb

Опять же, не имеет смысла ...

вычисление адреса - чертовски много проще с степенями 2, и это имеет значение, когда вы делаете логику из необработанных транзисторов в маленьких банках - Майк

Поскольку байты являются наименьшей адресуемой единицей, это не имеет особого смысла. Много комментариев по поводу комментария. Может быть, я что-то пропустил.

Из Википедии :

Стандарт де-факто, состоящий из восьми битов, представляет собой удобную степень двух, допускающую значения от 0 до 255 для одного байта.

И это было бы удобно, потому что ...?

Для пояснения речь идет о количестве бит на байт (например, 8 или 6 и т. Д.), А не о количестве значений на байт (например, 28 или 26 и т. Д.). Из-за путаницы я также отмечаю, что речь идет не о размерах Word.

Меня не слишком интересуют исторические причины. Это было хорошо объяснено в другом месте (см. Ссылки).


Связанный вопрос по SO: /programming/1606827/why-is-number-of-bits-always-a-power-of-two

Andreas
источник
2
@gnat Я почти уверен, что мы говорим здесь о количестве бит на байт (т.е. 8 в 8-битном байте), а не о количестве значений, которые может представлять байт (т.е. 2 ^ 8 в 8-битном байте). Так, если у вас есть, например, 6-битный байт, 6 не является степенью двойки , но да, 6-битный байт может представлять степень двух чисел.
8bittree
2
@ 8bittree Я думаю, что понял, спасибо за объяснение! (отозвано дублирующее голосование - хотя я думаю, что читателям было бы легче, если бы объяснение, как в вашем последнем комментарии, было бы отредактировано в вопросе, эта вещь кажется довольно тонкой)
комнат
2
Аналогичный вопрос для SO: stackoverflow.com/q/1606827/3723423 - ответ приносит некоторые правдоподобные аргументы об удобстве
Кристоф
2
@ Снеговик: пост ОП содержит ошибку «напрашивается вопрос»: «Почему полномочия двух считаются удобными размерами байтов?» Это не так. Это не имеет ничего общего с полномочиями двух; он неправильно прочитал предложение в статье в Википедии.
Роберт Харви
3
@RobertHarvey В ответ на вопрос «Какова история того, почему байты восемь бит?» (также связано в моем вопросе) есть следующее предложение: «Бинарные компьютеры побуждают дизайнеров делать размеры двух степеней». Я тоже неправильно это прочитал? Что, по вашему мнению, означают оба источника? Просто сказать «ты ошибся» на самом деле не делает это для меня.
Андреас

Ответы:

10

Я не думаю, что 8-битные байты были успешными, потому что их ширина равна степени двух. Если вы не хотите обращаться с битами индивидуально - и это является общей чертой ни сейчас, ни в прошлом - обладание степенью двойки не имеет реального практического значения (просто - сейчас гораздо больше, чем в прошлом, когда щадят некоторые дискретные компоненты были важны - рефлекс для инженеров аппаратного и программного обеспечения, и пребывание в знакомой среде важно для других целей), и я не помню, чтобы я упоминал упомянутое в моей истории вычислений (1). Нужны были строчные буквы, что означало нечто большее, чем тогдашние доминирующие 6-битные наборы символов. ASCII был 7-битным, но ASCII тогда был, хотя и чисто для обмена (и, следовательно, для преобразования во внутренний код для обработки), и, таким образом,

Подкомитет признает, что производитель компьютеров вряд ли разработает компьютеры, которые используют 7-битные коды для внутреннего использования. Они чаще используют 4-битные, 6-битные и 8-битные коды. В настоящее время не существует широко распространенной потребности в обмене более чем 128 отдельными и разными символами между компьютерами, а также между компьютерами и соответствующим оборудованием ввода / вывода. [бумажная лента, которая имела естественный размер кадра 8 битов, но требовала четности, поэтому полезная нагрузка кадра составляла 7 битов, также упоминается в пользу 7-битного символа для ASCII, степень двух не упоминается среди преимуществ 8 битов ] (2)

и для аппаратного выигрыша 8-битного байта, поскольку он позволял упаковать 2 десятичных цифры в один байт в то время, когда 75% данных были числовыми и представлены в BCD (3).

(1) например, Бло и Брукс, Компьютерная архитектура ; MacKenzie, Наборы кодированных символов, История и Развитие обсуждают эту тему.

(3) Документ X3.2 - Подкомитет, ответственный за ASCII - цитируется Маккензи.

(3) Маккензи, снова.

AProgrammer
источник
1
Спасибо. Ваш ответ на месте, и вы принесли ссылки. У тебя есть мой голос. Я понимаю, хотя, если то, что вы говорите, правда, это также невозможно доказать. Не может доказать несуществование чего-либо. Я полагаю, что мне следует пообщаться с теми, кто претендует на «удобство», и проверить их источники. Может быть, это просто распространенный слух.
Андреас
Другой фактор удобства заключается в том, что байт можно легко представить в виде двух шестнадцатеричных значений. Помещение двух двоично-десятичных знаков (BCD) в один байт чаще называют упакованным десятичным числом. Это действительно считалось удобным, потому что десятичные числа могут быть прочитаны как десятичные, когда данные отображаются в шестнадцатеричном виде.
JimmyJames
12-битные байты могут быть легко представлены в виде трех шестнадцатеричных значений. И вы можете хранить три числа BCD в 12-битном байте. Конечно, это намного лучше, чем два шестнадцатеричных значения и два числа BCD. На самом деле, 10-битный байт может содержать три десятичных знака. И я думаю, что так работает стандарт десятичных чисел с плавающей запятой IEEE.
gnasher729
1
@JimmyJames, я думаю, что ты получаешь обратную связь с шестнадцатеричной. Шестнадцатеричное стало популярным, потому что это был компактный способ представления 8-битного байта, ранее восьмеричный был гораздо более популярным (и он был более популярен на машине, как PDP-11, которая имела 8-битные байты, но где 3-битные поля были значительными в кодировке набора команд).
AProgrammer
@ gnasher729, 8-битный байт - ребенок 60-х годов. Переход от 6-битного к 12-битному символу был немыслим в 60-х годах. Даже сегодня, когда мы гораздо менее стеснены, UTF-8 популярен, потому что UTF-16 считается слишком расточительным. 10-битный байт был почти невообразимым, и кодирование 10 бит на 3 десятичные цифры также совершенно нецелесообразно, когда вы изучаете значения в регистрах и в памяти с лицевой панели, не говоря о влиянии на реализацию с использованием технологии того времени.
AProgrammer
2

Кроме исторической случайности, нет особой причины, по которой мы должны использовать 8/16/32/64 бит. Я полагаю, что 12/24/48/96 бит действительно будет более полезным.

Для обработки текста Unicode с использованием гипотетического UTF-24 будет дешевле, чем UTF32; гипотетический UTF-12 будет хранить все одно- и двухбайтовые символы UTF-8 в 12 битах, а все трех- и четырехбайтовые символы UTF-8 - в 24 битах (диапазон будет немного уменьшен до 2 ^ 20 символов, но это все равно в четыре раза больше, чем щедро используется); Код будет проще, потому что есть только два варианта.

Для плавающей запятой обычно достаточно 48 бит. 96 бит значительно лучше, чем 80 бит. 24 бита полезны для графики; гораздо полезнее, чем 16-битные, поддерживаемые некоторыми видеокартами. 48-битные указатели могут обрабатывать 256 терабайт.

Единственный недостаток - это битовые массивы, где для вычисления байтов необходимо деление на 12. Если это кажется важным, я уверен, что деление на 12 может быть достаточно эффективно реализовано аппаратно.

gnasher729
источник
Интересный момент о UTF, хотя и немного не по теме. Размер байта (или бита) с плавающей запятой - это бесконечная битва между памятью и точностью, когда вам просто нужно жить с тем или другим. Хорошее замечание о битовых массивах тоже.
Андреас
1
Интересные мысли, но я не уверен, что это отвечает на вопрос.
1
Вопрос был: «Почему восемь бит считается удобным». Конечно, ответ «это не так» отвечает на вопрос.
gnasher729
1
@ gnasher729 Вопрос был: «Почему мощность двух битов на байт считается удобной», хотя ваш ответ, кажется, также применим.
8bittree
2
Комментарии не для расширенного обсуждения; этот разговор был перенесен в чат .
Яннис
2

Это удобно из-за общих аппаратных архитектур, использующих кратные 8, например 32-битные и 64-битные архитектуры. Это означает большую эффективность при использовании 8-битного хранения и передачи данных.

«Тем не менее, соображения экономии в дизайне настоятельно требуют одного размера или очень немногих размеров, связанных с кратными или дробными (подмножениями) основного размера. Этот предпочтительный размер становится размером слова архитектуры».

Word (компьютерная архитектура)

Смотрите также: Какова история того, почему байты являются восьмибитными?

Брэд Томас
источник
5
Я не приму это как ответ. Мой вопрос заключается в том, почему удобство power-of-two удобно, а не почему стандарт defacto является 8-битным. И история 8-битных упоминаний о том, что 5, 6 и 7 битов используются по реальным причинам, а переход с 7 на 8 мотивируется «да, почему нет». У меня было ощущение, что чтение разных источников имеет двойное преимущество, а не совместимость с современными системами. (На самом деле 8-битные дали четность 7-битных наборов символов.) Word - это совсем другое, где я получаю преимущество размера двух степеней, т.е. вместо вычислений можно использовать сдвиг вместо множественных.
Андреас
3
@RobertHarvey Этот вопрос не о количестве состояний на коммутатор (т. Е. Двоичное или триальное или более), а о том, сколько коммутаторов объединить в группы. Смотрите мое редактирование на вопрос.
8bittree
2
Что касается вашего редактирования, то нет значимого различия между количеством битов на байт и количеством значений на байт. Это два способа выразить одно и то же. Количество значений, которые может содержать байт, следует непосредственно из числа битов, которые он содержит: байт имеет 8 битов, и поэтому он может хранить значения до 2⁸-1.
Роберт Харви
2
Логически из этого следует, что вы выбираете размер для байта, который может содержать удобный числовой диапазон. ASCII - это 7 бит, потому что он обеспечивает 128 различных значений, что достаточно для кодирования обоих случаев латинского алфавита, числовых символов, знаков препинания, управляющих символов и нескольких специальных символов. Байт может содержать 7 бит ASCII и один бит четности для проверки ошибок, всего 8 бит, подходящих для телетайпа. С тех пор мы использовали этот размер для байта.
Роберт Харви
2
@JeremyKato Устройства, которые я упомянул, более старые (по большей части эпохи 60–80-х годов), поэтому, вероятно, вы с ними не знакомы. На самом деле ASCII - это 7-битное кодирование (четность не является частью стандарта). Но по основной части вашего комментария нет, я ничего не пропускаю. Я понимаю, что есть причины, по которым 8-битные данные особенно удобны, но вам с Робертом Харви не хватает именно того, что вопрос задается в основном о 2-битных мощностях , а не о 8-битных.
8bittree
1

Согласно статье Википедии на слово , это делает расчеты , связанные с адресацией памяти значительно проще:

Различные объемы памяти используются для хранения значений данных с разной степенью точности. Обычно используемые размеры - это степень, кратная единице разрешения адреса (байта или слова). Преобразование индекса элемента в массиве в адрес элемента затем требует только операции сдвига, а не умножения. В некоторых случаях эти отношения могут также избежать использования операций деления. В результате большинство современных компьютерных конструкций имеют размеры слова (и другие размеры операндов), которые в два раза больше размера байта.

Vartec
источник
2
Да, мощность в два раза больше байта. Не существует внутренней причины, по которой байт должен быть восемь битов, а не девять, двенадцать или пятнадцать.
gnasher729
@ gnasher729, гораздо проще разделить на 8 (или 16, 32 или 64), чем делить на 9, 12 или 15.
Роберт Бристоу-Джонсон
@ gnasher729, если слово имеет биты степени 2 и байты степени 2, это означает, что байт должен быть битами 2
vartec
@vartec В статье и цитате говорится: «Обычно используемые размеры обычно представляют собой степень, кратную единице разрешения адреса (байт или слово)» и «большинство современных компьютерных конструкций имеют размеры слова (и другие размеры операндов), которые являются степенью двухкратного размера байта. " Я прочитал "размер слова" измеряется в байтах, а не в битах. В статье не существует правила относительно размера слова в битах.
Андреас
@vartec: ЕСЛИ Очевидно, никто не будет строить машину с 32-битными словами и 12-битными байтами. Но ничто не говорит против машины с 48- или 96-битными словами и 12-битными байтами. И были машины, где слово было десять байтов.
gnasher729
0

Это тесно связано с адресным пространством. Добавив еще один бит к вашей адресной шине, вы можете адресовать вдвое больше ячеек памяти. Поэтому, когда вы добавляете эту дополнительную строку, вы можете использовать ее в полном объеме.

Это приводит к естественному прогрессированию 1, 2, 4, 8, 16, 32 и так далее.

На техническом уровне производства также легко повторить тот же литографический рисунок. То есть удвоить его. Если вы начинаете с одной защелки, а затем удваиваете шаблон, вы пройдете 8, а не 6, 10 или 12.

Мартин Маат
источник
1
Как это связано с количеством битов в байте? Вы серьезно заявляете, что 32-битное логическое И легче реализовать, чем 36 или 28 бит?
gnasher729
1
Я не делал никаких таких претензий. Мое предложение заключается в том, что это связано с более ранними разработками, которые постепенно расширялись в WIDRH, поскольку транзисторы стали дешевле, а микросхемы допускали меньшие схемы.
Мартин Маат
1
Интересная теория о техническом уровне производства. Вы можете быть к чему-то. Не могли бы вы расширить абзац или предоставить ссылку, объясняющую основы?
Андреас
1
Это чепуха. Например, в видеокарте, где в разных местах нужны всевозможные размеры нечетных битов, все выполняется точно с требуемым размером, а не на один бит больше. Если для какой-либо операции декодеру h.264 требуется точность 19 бит, то аппаратное обеспечение реализует 19 бит, а не 20, 24 или 32. И, извините, вы не манипулируете литографическими шаблонами. Вы определяете аппаратное обеспечение, а затем запускаете его через некоторое программное обеспечение, которое создает макет.
gnasher729
1
@MartinMaat: вы путаете маркетинг и стандартизацию с технологическими причинами. И технология - это то, что мы обсуждаем.
gnasher729
0

Не всегда ширина слова является степенью двойки. Недавно я занимался кодированием в DSP SHArC, который имеет 32-разрядную ширину слова для чисел, но не для кодов операций (шириной 48 бит).

Вероятно, причина, по которой ширины слов являются степенью двойки, заключается в том, что некоторые команды проверяют (или устанавливают, или очищают, или переключают) один бит или сдвиг (или поворот) влево или вправо на указанное количество бит. В коде операции есть битовое поле для указания местоположения одиночного бита или количества битов для сдвига. Если ширина слова является степенью двойки, это битовое поле требует log 2 (word_width) битов, чтобы охватить все слово. То есть, для слова, ширина которого 32 бита, требуется 5-битное поле в коде операции для этих операций. Если бы слово было шириной 33 бита, ему понадобилось бы 6, иначе оно не могло бы охватить все слово, но это также имело бы место, если бы слово было шириной 64 бита.

Биты в коде операции чрезвычайно ценны, поэтому они обычно не хотят их тратить. Тогда имеет смысл сделать слово степенью 2 в ширину.

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

Роберт Бристоу-Джонсон
источник
Это не моя область знаний, но это звучит как веская причина для двух байт И размера слова. Я полагаю, вы должны меньше беспокоиться о UB. Для сдвига 33-битного кода потребуется 6-битный код операции, но только около половины возможных значений (0-32) имеют полезное значение. Вы бы согласились?
Андреас
код операции должен быть шире, чем битовое поле, необходимое для счетчика сдвигов. байт - это не что иное, как слово из 8 бит. причина, по которой компьютерное оборудование имеет тенденцию использовать размеры слов, которые составляют 8 или 16, или 32, или 64 бита (это не всегда так, у старого DSP56000 были 24-битные слова), заключается в причинах, которые я привел выше, и причинах, приведенных vartec : учитывая растровое изображение упакованных слов, и вам дают номер строки и столбца определенного пикселя, нужно разделить номер столбца на ширину слова, чтобы узнать, какое слово получить для проверки или изменения пикселя. деление на степень 2 легко.
Роберт Бристоу-Джонсон
Что такое «битая карта упакованных слов»? Подходит ли HighColor этому описанию?
Андреас
@ robertbristow-johnson: полное отсутствие фантазии. С 9-битными байтами мы использовали бы 36-битные слова, 130 миллионов цветов вместо 16 миллионов цветов в RGBA, RGB666 вместо RGB555 или чудовищный RGB565 для некачественного цвета, и все было бы прекрасно. И ASCII будет включать в себя 512 символов до латинского Extended.
gnasher729
@ Андреас, нет, я имел в виду два "цвета". полностью белый или полностью черный.
Роберт Бристоу-Джонсон