Яка різниця між словом і байтом?


93

Я провів кілька досліджень. Байт - це 8 біт, а слово - це найменша одиниця, яку можна адресувати в пам'яті. Точна довжина слова варіюється. Я не розумію, у чому сенс мати байт? Чому б не сказати 8 біт?

Я запитав у професора це питання, і він сказав, що більшість машин в наш час можуть бути адресовані байтам, але що б це зробило слово?


12
Краще уникати терміна "слово" через його неоднозначність. Або
уточніть,

2
Чи вигідно, щоб слово було більшим чи меншим?

2
@ quest4knoledge більше слово дозволяє отримувати більші вказівники (а саме більше оперативної пам'яті) і дозволяє швидко обробляти більші числа. Це також може дозволити, щоб деякі операції, такі як memset, були швидшими, працюючи у більших блоках. Однак процесори з більшим словом потребують більше транзисторів у процесорі і можуть споживати трохи більше енергії.
VoidStar

@VoidStar і більше слово означатимуть менший адресний простір, чи я в розгубленості?

1
Відповісти на питання "який сенс мати байт" - це історія. Процесори не почали працювати з чим-небудь більшим, ніж "байт" (раніше процесори обробляли лише nybbles (4 біти), але термін насправді так і не зафіксував). Першим процесором будь-якої ноти був Intel 8086/8088. Він був розроблений для роботи з інструкціями, побудованими навколо "байтів", саме тому ми також досі згадуємо пам'ять з точки зору xBytes, наприклад, GigaBytes, оскільки основною одиницею адресної пам'яті був байт. 'K - це посилання на KiloBytes, у яких на першому ПК було 16, що розширюється до 64 - вууууу!
Фред

Відповіді:


169

Байт : Сьогодні байт майже завжди 8-бітний. Однак це не завжди було так, і немає "стандарту" чи чогось, що диктує це. Оскільки 8 біт - це зручне число для роботи, воно стало фактичним стандартом.

Слово : Природний розмір, з яким процесор обробляє дані (розмір реєстру). Найпоширеніші розміри слів, які зустрічаються сьогодні, - це 8, 16, 32 і 64 біти, але можливі й інші розміри. Наприклад, було декілька 36-розрядних машин або навіть 12-розрядних машин .

Байт є найменшою адресується одиницею для процесора. Якщо ви хочете встановити / очистити одиничні біти, спочатку потрібно отримати відповідний байт з пам'яті, возитися з бітами, а потім записати байт назад у пам'ять.

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

Є також кілька процесорів, які мають різний розмір вказівника : наприклад, 8086 - це 16-розрядний процесор, що означає, що його регістри мають 16-бітову ширину. Але його покажчики (адреси) мають 20-бітову ширину і були розраховані шляхом поєднання двох 16-бітових регістрів певним чином.


9
Відмінна відповідь. Я б лише поспішав із " [натомість це слово - це найбільша частина бітів, за допомогою якої процесор може обробляти ... за раз ". Це насправді найпоширеніший шматок бітів і т. Д. Багато архітектур, що еволюціонували з часом, мають розмір слова, який є не найширшим, але вони часто обмежені в тому, що вони можуть зробити з їхніми найширшими значеннями.
Росс Паттерсон,

11
Для додаткового кредиту, "гризти" - це загальний термін для половини байта. Вона виникла під час ранньої ери мікрокомп'ютерних процесорів ( наприклад , Intel 8080) і завжди розумілася як 4 біти, оскільки до того часу байт оселився до 8 бітів.
Росс Паттерсон,

6
Сьогодні 8-бітовий байт є стандартом; див. IEC 80000-13: 2008.
user2431763 02

1
@DebanjanDhar: Так, вони не пов’язані між собою. Єдине відношення - сторінка (AFAIK) завжди кратна розміру слова.
DarkDust

4
x86 (як зазвичай) ускладнює ситуацію: за термінологією Intel a wordстановить 16 біт, навіть на сучасних процесорах x86, де розмір операнда за замовчуванням становить 32 біти (dword), а ціла ширина регістру становить 64 біти (qword). А регістри xmm мають ширину 128 біт ( movdqaпереміщення вдвічі чотиригранні ). Ширина пам'яті має щонайменше 64 біти в ширину (і передається пакетами в 64 байти = рядок кешу), а модуль виконання до шляхів кешування має щонайменше 128 бітів або 256 або навіть 512 бітів. Яким би не був власний розмір машинного слова сучасного x86, це не 16 біт, але сучасний x86 все ще використовує термінологію 8086.
Пітер Кордес,

16

Я не розумію, у чому сенс мати байт? Чому б не сказати 8 біт?

Окрім технічної точки зору, що байт - це не обов'язково 8 біт, причинами існування терміна є проста людська природа:

  • економія зусиль (вона ж лінь) - простіше сказати "байт", а не "вісім біт"

  • трибалізм - групи людей люблять використовувати жаргон / приватну мову, щоб виділити їх серед інших.

Просто йдіть потоком. Ви не збираєтеся міняти 50+ років накопиченої ІТ-термінології та культурного багажу, скаржившись на це.


FWIW - правильний термін для використання, коли ви маєте на увазі "8 біт, що не залежать від апаратної архітектури", це "октет".


я думав, що октет - це лише французький переклад байту, дякую;)
Abdelouahab Pp

8

Байт

Я намагаюся відповісти на це питання з точки зору С ++.

Стандарт С ++ визначає "байт" як "Адресована одиниця даних, достатньо велика, щоб вмістити будь-який член основного набору символів середовища виконання".

Це означає, що байт складається щонайменше з достатньої кількості сусідніх бітів для розміщення основного набору символів для реалізації. Тобто кількість можливих значень має дорівнювати чи перевищувати кількість різних символів. У Сполучених Штатах базовими наборами символів, як правило, є набори ASCII та EBCDIC, кожен з яких може містити 8 біт. Отже, гарантується, що байт матиме щонайменше 8 бітів.

Іншими словами, байт - це обсяг пам'яті, необхідний для зберігання одного символу.

Якщо ви хочете перевірити "кількість бітів" у вашій реалізації на C ++, перевірте файл "limit.h". Він повинен мати запис, як показано нижче.

#define CHAR_BIT      8         /* number of bits in a char */

СЛОВО

Слово визначається як конкретна кількість бітів, які можуть оброблятися разом (тобто за одну спробу) машиною / системою. Крім того, ми можемо сказати, що Word визначає обсяг даних, який може передаватися між процесором і оперативною пам’яттю за одну операцію.

Апаратні регістри в комп'ютерній машині мають розмір слова. Розмір слова також визначає найбільшу можливу адресу пам'яті (кожна адреса пам'яті вказує на пам'ять розміром в байт).

Примітка. У програмах на C ++ адреси пам'яті вказують на байт пам'яті, а не на слово.


6

Чому б не сказати 8 біт?

Оскільки не всі машини мають 8-бітові байти. Оскільки ви позначили це тегом C, загляньте CHAR_BITв limits.h.


6

Слово - це розмір регістрів у процесорі. Це означає, що інструкції процесора, такі як, add, mul тощо, знаходяться на вводах розміру слова.

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


Тож у певному сенсі термін "байт" просто використовується для зручності?

Так, "байт" був особливо зручним, коли цей термін був винайдений. Як і багато конвенцій, коли вони починають діяти, вони зберігаються. Я не впевнений, що термінологія, заснована на байтах, насправді полегшує розуміння комп’ютерів у загальному вигляді, але це домінуюча умова і не схожа змінюватися найближчим часом.
VoidStar

Байт - це термін, що використовується для одиниці, яка використовувалася як символ у тексті. Історично існували байти розміром від 6 до 9 бітів.
starblue

@starblue як можливо, що символ займає менше місця, ніж слово?

1
@ quest4knoledge: оскільки пам'ять зберігається меншими шматками, що слова. Слово - 32 біти (або 64 біти на новіших машинах). В алгоритмі, який обробляє окремі символи 1 на 1, вони ВЖЕ беруть ціле слово, лише перебуваючи всередині центрального процесора, а коли повертаються в оперативну пам'ять, вони упаковуються щільніше.
VoidStar

5

У цьому контексті слово - це одиниця, яку машина використовує при роботі з пам'яттю. Наприклад, на 32-бітній машині слово має 32 біти, а на 64 біті - 64 біти. Розмір слова визначає адресний простір.

У програмуванні (C / C ++) слово зазвичай представляється int_ptrтипом, який має однакову довжину з покажчиком, таким чином абстрагуючи ці деталі.

Деякі API можуть вас заплутати, наприклад, Win32 API, оскільки він має такі типи, як WORD(16 біт) та DWORD(32 біт). Причина полягає в тому, що спочатку API націлювався на 16-розрядні машини, потім був перенесений на 32-розрядні машини, потім на 64-розрядні машини. Щоб зберегти вказівник, ви можете використовувати INT_PTR. Детальніше тут і тут .


5

Здається, всі відповіді передбачають мови високого рівня та переважно C / C ++.

Але питання позначене як "збірка", і у всіх моїх складальних установках (для 8-бітних, 16-бітних, 32-бітних та 64-бітних процесорів) визначення є набагато чіткішими:

byte  = 8 bits 
word  = 2 bytes
dword = 4 bytes = 2Words (dword means "double word")
qword = 8 bytes = 2Dwords = 4Words ("quadruple word")

3
Ні, ці розміри дійсні лише на 16-бітовій машині. Ви, мабуть, звикли до програмування Windows, яке все ще використовує ці макроси, оскільки це спадщина з 16-розрядних днів, і MS не потрудилася це виправити.
DarkDust

2
До речі, оскільки розмір слова (і насправді навіть байта) може змінюватися, ISO-C має типи int<X>_tта uint<X>_t(і більше), які слід використовувати, якщо ви хочете змінну / параметр певного бітового розміру.
DarkDust

@DarkDust ми тут говоримо про мову асемблера. Стандарти С не актуальні. До речі, я програмую збірку з 1980 року, і використовувалися ті самі імена. (ну, можливо, крім qword)
johnfound

Однак я знайшов виняток: у GNU as .wordможе бути 32 біти (наприклад, для Sparc ).
DarkDust

На жаль, AS не є асемблером. Це потворний, каліка, жалюгідний, мутант, створений з єдиною метою - стати задньою ланкою для компіляторів HLL.
johnfound

3

Точна довжина слова варіюється. Я не розумію, у чому сенс мати байт? Чому б не сказати 8 біт?

Незважаючи на те, що довжина слова різниться, на всіх сучасних машинах і навіть у всіх старих архітектурах, які мені знайомі, розмір слова все одно кратний розміру байта. Отже, немає особливого недоліку у використанні "байта" понад "8 бітів" щодо змінної величини слова.

Крім цього, є кілька причин використовувати байт (або октет 1 ) над "8 бітами":

  1. Більші одиниці просто зручні, щоб уникнути дуже великих чи дуже малих цифр: ви можете також запитати "чому сказати 3 наносекунди, коли можна сказати 0,000000003 секунди" або "чому сказати 1 кілограм, коли можна сказати 1000 грамів" тощо.
  2. Окрім зручності, одиниця байту є якось фундаментальною, ніж 1 біт, оскільки багато операцій зазвичай працюють не на рівні байтів, а на рівні байтів: адресація пам'яті, виділення динамічного сховища, зчитування з файлу або сокета тощо.
  3. Навіть якби ви прийняли "8 біт" як тип одиниці, тож ви могли б сказати "два 8 біти" замість "два байти", часто було б дуже заплутано, коли б ваш новий блок починався з числа. Наприклад, якщо хтось сказав "сто 8-бітових", це можна легко інтерпретувати як 108 біт, а не як 100 біт.

1 Хоча для цієї відповіді я вважатиму байт 8 бітами, це не є загальним істинним: на старих машинах байт може мати різний розмір (наприклад, 6 бітів . Октет завжди означає 8 бітів, незалежно від машини ( тому цей термін часто використовується при визначенні мережевих протоколів.) У сучасному використанні байт переважно використовується як синонім 8 бітів.


2

Незалежно від термінології, яка присутня в таблицях даних та компіляторах, "байт" - це вісім бітів. Не намагаймося плутати запитувачів та загальні положення з більш неясними винятками, особливо, оскільки слово «байт» походить від виразу «By Eight». Я працював у напівпровідниковій / електронній промисловості понад тридцять років, і жодного разу не знали, що «байт» використовував щось більше ніж вісім біт.


Незвично так (ми це знаємо. Прикладом є: техаські інструменти c54x байт Google texas tools c54x. Ti.com/lit/ug/spru393/spru393.pdf "Інструкції C55x мають змінну довжину байтів, яка варіюється від 8 біт до 48 біт «. stackoverflow.com/questions/2098149 / ...
barlop

1
Воно не приходить звідти. Цей термін насправді був придуманий В. Бухгольцем в IBM наприкінці 1950-х. Джерело: bobbemer.com/BYTE.HTM . За словами Боба Бемера, правопис "байт" було обрано переважно перед "укусом", щоб уникнути плутанини (з "бітом") через друкарські помилки. Він би знав. Він там був!
Stephen C

(Тільки 30 років? Ви - просто шпигач. Я навчився програмувати на системах, де природний розмір "байта" не становив 8 біт :-))
Стівен С,

1

Довідково: https://www.os-book.com/OS9/slide-dir/PPT-dir/ch1.ppt

Основною одиницею комп’ютерного сховища є біт. Біт може містити одне з двох значень, 0 і 1. Усі інші сховища в комп'ютері базуються на колекціях бітів. Враховуючи достатню кількість бітів, дивно, скільки речей може представляти комп’ютер: цифри, літери, зображення, фільми, звуки, документи та програми, щоб назвати декілька. Байт становить 8 біт, і на більшості комп’ютерів це найменший зручний фрагмент сховища. Наприклад, у більшості комп’ютерів немає інструкції про бітне переміщення, але є для переміщення байта. Менш поширеним терміном є слово, яке є рідною одиницею даних даної архітектури комп'ютера. Слово складається з одного або декількох байтів. Наприклад, комп'ютер, який має 64-розрядні регістри та 64-розрядну адресацію пам'яті, зазвичай має 64-розрядні (8-байтові) слова. Комп’ютер виконує багато операцій у своєму рідному розмірі слова, а не в байтах за раз. Комп'ютерна пам'ять, поряд з більшістю комп'ютерної пропускної здатності, як правило, вимірюється і маніпулюється ними в байтах і колекціях байтів. Кілобайт, або КБ, становить 1024 байт мегабайт, або МБ, становить 1024 2 байта гігабайт, або ГБ, 1024 байти терабайт, або ТБ, 1024 4 байта петабайт, або PB, 1024 5 байт Комп’ютер виробники часто округлюють ці цифри і кажуть, що мегабайт становить 1 мільйон байт, а гігабайт - 1 мільярд байт. Вимірювання в мережі є винятком із цього загального правила; вони даються в бітах (оскільки мережі переміщають дані потроху за раз) 024 5 байт Виробники комп’ютерів часто округлюють ці цифри і кажуть, що мегабайт становить 1 мільйон байт, а гігабайт - 1 мільярд байт. Вимірювання в мережі є винятком із цього загального правила; вони даються в бітах (оскільки мережі переміщають дані потроху за раз) 024 5 байт Виробники комп’ютерів часто округлюють ці цифри і кажуть, що мегабайт становить 1 мільйон байт, а гігабайт - 1 мільярд байт. Вимірювання в мережі є винятком із цього загального правила; вони даються в бітах (оскільки мережі переміщають дані потроху за раз)


-1

Якщо машина має байтову адресу, а слово - це найменша одиниця, яку можна адресувати в пам’яті, тоді, мабуть, слово було б байтом!


Так. Мінімальна адресована одиниця пам’яті на TMS320C54xx (одна з DSP Texas Instruments) має 16-бітну довжину, що також є найменшим розміром її регістрів загального призначення. І компілятор TI C визначає на ньому char = short = int = 16 біт.
Олексій Фрунзе,

Ні, більшість машин RISC мають 32-розрядні слова, але можуть адресувати окремі байти. Наприклад, на MIPS, word безумовно, означає 32 біти, але є lbінструкція (завантажити байт), яка завантажує 8 бітів.
Пітер Кордес,

-1

Група з 8 бітів називається байтом (за винятком, якщо це не так :) для певних архітектур)

Слово є фіксованим розміром групи біт, які обробляються як єдине ціле з допомогою набору команд і / або апаратних засобів процесора. Це означає, що розмір реєстру загального призначення (який зазвичай перевищує байт) - це слово

У C слово найчастіше називають цілим числом =>int


7
Група з 8 бітів називається октетом.
cnicutar

2
правильний: термін octetбув визначений для явного позначення послідовності з 8 бітів через неоднозначність, пов'язану з байтом терміна . Але мені подобається звук byteкращого :)
tolitius

2
@tolitius: +1 для "Але мені подобається звук byteкращого": Я сильно підозрюю, що ви не самотні в цьому і безпечні для декількох нішевих систем, "плутанина" байту, можливо, має розмір, відмінний від 8-бітового зараз не актуальна.
Йоахім Зауер,

-1

Умови BYTE та WORD відносяться до розміру процесора, на який йдеться. Найпоширенішими процесорами є / були 8 біт, 16 біт, 32 біт або 64 біт. Це довжини WORD процесора. Насправді половина СЛОВА - це БАЙТ, незалежно від числової довжини. Готові до цього, половина байта - це НІББЛА.


Ні, в процесорах із 32-бітними словами та 8-бітовими байтами (наприклад, MIPS або ARM), півслова - це 2 байти.
Пітер Кордес,

-3

Насправді, у загальновживаному слові слово стало синонімом 16 бітів, подібно до того, як байт має 8 бітів. Може трохи заплутати, оскільки "розмір слова" на 32-розрядному процесорі становить 32 біти, але, говорячи про слово даних, це означатиме 16 біт. Мікроконтролери з 32-бітним словом називали свої інструкції "довгими" (нібито, щоб уникнути плутанини слова / подвійного слова).


1
Це повністю залежить від типу процесора. Як ви зазначаєте, на 32-розрядних машинах, що не належать до IA32, "слово" зазвичай становить 32 укуси.
Росс Паттерсон,

2
@RossPatterson Це повністю залежить від того, розробляєте ви програмне забезпечення або вечеряєте.
інженер

ARM / MIPS / інші основні архітектури RISC містять 32-розрядні слова. Це ширина регістру (для 32-розрядної версії цих ISA) та ширина інструкції. 16 біт - це півслова, тому інструкції ARM люблятьldrh завантажувати 16 бітів і нульово розширювати його в 32-бітовий регістр. Або ldrshзавантажити та розширити знак 16 біт.
Пітер Кордес,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.