Чи "зручно" потужність двох біт на слово? Якщо це так, то чому це?


11

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

З якої історії, чому байт - це вісім біт? ми читаємо у затвердженій відповіді:

Двійкові комп’ютери мотивують дизайнерів на створення розмірів у два.

Гаразд, але чому? У тому ж запитанні, але в полі для коментарів я знаходжу:

Останнє речення жартома? 12-бітний байт був би незручним, оскільки це не потужність 2. - robjb

Знову ж таки, безпідставний ...

Обчислення адреси - це чорта набагато простішого з потужностями 2, і це враховується, коли ви робите логіку із сирих транзисторів у маленьких банках - Майк

Оскільки байти є найменшою адресною одиницею, це не має особливого сенсу. Хоча багато коментарів щодо коментаря. Можливо, я щось пропустив.

З Вікіпедії :

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

І це було б зручно, тому що ...?

Для уточнення мова йде про кількість біт на байт (наприклад, 8 або 6 тощо), а не кількість значень на байт (наприклад, 2 8 або 2 6 тощо). Через плутанину я також зазначу, що мова не йде про розміри Word.

Мене не надто цікавлять історичні причини. Це було добре пояснено в інших місцях (див. Посилання).


Пов’язане запитання щодо SO: /programming/1606827/why-is-number-of-bits-always-a-power-of-two


2
@gnat Я впевнений, що ми говоримо про кількість бітів на байт (тобто 8 в 8-бітовому байті), а не кількість значень, які байт може представляти (тобто 2 ^ 8 у 8-бітовому байті). Отже, якщо у вас, наприклад, 6-бітний байт, 6 не є потужністю двох , але так, 6-бітний байт може представляти потужність двох значень.
8bittree

2
@ 8bittree Я думаю, що я це отримав, дякую за пояснення! (повторне повторне голосування - хоча я вважаю, що читачам буде легше, якби пояснення, як у вашому останньому коментарі, було б редагуватись у запитання, ця річ здається досить тонкою)
gnat

2
Аналогічне запитання щодо SO: stackoverflow.com/q/1606827/3723423 - відповідь приносить кілька правдоподібних аргументів про зручність
Крістоф

2
@Snowman: Пост ОП містить помилковість "випрошуючи питання": "Чому повноваження двох вважаються зручними розмірами байтів?" Вони ні. Це не має нічого спільного з двома силами; він неправильно прочитав вирок у статті Вікіпедії.
Роберт Харві

3
@RobertHarvey У відповідь на тему "Яка історія, чому байти - це вісім біт?" (також пов'язане з моїм запитанням) є таке речення: "Двійкові комп’ютери мотивують дизайнерів на створення розмірів у два". Я теж це неправильно прочитав? Що означають на вашу думку обидва джерела? Просто сказати, що ви «помилилися» - це не дуже для мене.
Андреас

Відповіді:


10

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

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

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

(1) наприклад, Blaauw and Brooks, Computer Architecture ; MacKenzie, набори кодованих символів, історія та розвиток обговорюють цю тему.

(3) Документ X3.2 - підкомітету, відповідального за ASCII - цитується MacKenzie.

(3) Маккензі, знову.


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-ти розрядів на три десяткових цифри також абсолютно непрактично, коли ви вивчаєте значення в регістрах та в пам'яті на передній панелі, не говорячи про вплив на реалізацію з технологією того часу.
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 може бути здійснено досить ефективно в апараті.


Цікавий момент щодо UTF, хоча і є трохи поза темою. Розмір байта з плаваючою комою (або біт) - це нескінченна битва між пам’яттю та точністю, де вам просто потрібно жити з тим чи іншим. Хороший момент і щодо бітових масивів.
Андреас

1
Цікаві думки, але я не впевнений, що це відповідає на питання.

1
Питання було так: "Чому вісім біт вважається зручним". Безумовно, сказавши "це не", відповідає на питання.
gnasher729

1
@ gnasher729 Питання було так: "Чому потужність двох біт на байт вважається зручною", хоча, здається, ваша відповідь так само застосовується.
8bittree

2
Коментарі не для розширеного обговорення; ця розмова була переміщена до чату .
Янніс

2

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

"Однак міркування економії в дизайні сильно наполягають на одному розмірі, або дуже мало розмірів, пов'язаних множинами або дробами (підмножинами) до основного розміру. Цей бажаний розмір стає розміром слова архітектури."

Word (комп'ютерна архітектура)

Дивіться також: Яка історія, чому байти - це вісім біт?


5
Я не прийму це як відповідь. У мене питання, чому потужність-два зручна, а не чому стандарт дефакто 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

Згідно зі статтею Вікіпедії за словом , це робить обчислення, пов'язані з адресацією пам'яті, значно простішими:

Різні обсяги пам'яті використовуються для зберігання значень даних з різним ступенем точності. Зазвичай використовувані розміри - це потужність двох кратних одиниці роздільної здатності адреси (байт або слово). Перетворення індексу елемента в масиві в адресу елемента вимагає лише операції зсуву, а не множення. У деяких випадках цей взаємозв'язок також може уникнути використання операцій поділу. Як результат, більшість сучасних комп’ютерних конструкцій мають розміри слів (та інших розмірів операндів), які в два рази перевищують розмір байта.


2
Так, потужність у два рази більше, ніж байт. Немає властивої причини, чому байт повинен становити вісім біт, а не дев'ять, дванадцять чи п’ятнадцять.
gnasher729

@ gnasher729, набагато простіше ділити на 8 (або 16 або 32 або 64), ніж ділити на 9 або 12 або 15.
Роберт Брістоу-Джонсон

@ gnasher729, якщо слово є потужністю 2 біти, а потужність - 2 байти, це означає, що байт повинен бути потужністю 2 біт
vartec

@vartec У статті і цитаті сказано: "Зазвичай використовувані розміри - це потужність двох кратних одиниці роздільної здатності адреси (байт або слово)" і "Більшість сучасних комп'ютерних конструкцій мають розміри слів (та інших розмірів операндів), які є потужністю вдвічі більший за байт ". Я читаю "розмір слова" вимірюється в байтах, а не в бітах. Не існує правила щодо розміру слів у бітах або має бути повноваженнями 2 у статті.
Андреас

@vartec: ЯКЩО. Очевидно, ніхто не побудував машину з 32-бітовими словами та 12-бітовими байтами. Але нічого не говорить проти машини з 48 або 96 бітовими словами та 12-бітовими байтами. І були машини, де слово було десять байтів.
gnasher729

0

Це тісно пов'язане з адресним простором. Додавши ще трохи до своєї адресної шини, ви можете адресувати вдвічі більше місць пам'яті. Тож коли ви додасте цей додатковий рядок, ви можете також скористатися ним у повному обсязі.

Це призводить до природного прогресування 1, 2, 4, 8, 16, 32 тощо.

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


1
Як це пов’язано з кількістю бітів у байті? Ви серйозно заявляєте, що 32-бітний логічний AND легше реалізувати, ніж 36 або 28 біт?
gnasher729

1
Я не висував жодної такої претензії. Моя пропозиція - це випливає з більш ранніх конструкцій, які поступово розширювались у широкій мірі, оскільки транзистори подешевшали, а ІС дозволено для менших схем.
Мартін Мейт

1
Цікава теорія щодо виробничого технічного рівня. Ви можете бути на чомусь. Чи можете ви продовжити абзац або, можливо, надати посилання, що пояснює основи?
Андреас

1
Це нісенітниця. Наприклад, у відеокарті, де потрібні всілякі непарні розміри бітів у різних місцях, все робиться саме з необхідним розміром, а не на один біт більше. Якщо декодеру h.264 для певної операції потрібна точність 19 біт, то апаратне забезпечення реалізує 19 біт, а не 20 або 24 або 32. І вибачте, ви не маніпулюєте літографічними візерунками. Ви визначаєте апаратне забезпечення, а потім запускаєте його через деяке програмне забезпечення, яке створює макет.
gnasher729

1
@MartinMaat: Ви плутаєте маркетинг + стандартизацію з технологічними причинами. І технологія - це те, що ми обговорюємо.
gnasher729

0

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

Можливо, причина, по якій ширина слова має силу двох, полягає в деяких інструкціях, які перевіряють (або встановлюють, очищають чи перемикають) один біт або зсувають (або обертають) вліво або вправо на вказану кількість біт. У опкоді є бітове поле, яке вказує розташування одиничного біта або кількість бітів для зсуву. Якщо ширина слова є потужністю двох, для цього бітового поля потрібні біти журналу 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 символів до латинського розширеного.
gnasher729

@Andreas, ні, я мав на увазі два "кольори". повністю білий або повністю чорний.
Роберт Брістоу-Джонсон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.