Байт (англ.byte) — одиниця вимірювання обсягу цифрової інформації, яка зазвичай містить вісім бітів і представлена двійковим числом. Історично байт був кількістю бітів, яка використовувалася для кодування одного текстового символу в комп'ютері[1][2] і тому він є найменшою адресною одиницею пам'яті в багатьох архітектурах комп'ютера.
Історично розмір байта залежав від апаратного забезпечення і не існувало жодних чітких стандартів, які б визначали його розмір. У минулому використовувалися байти розміром від 1[3] до 48[4] бітів[5][6]. Ранні системи кодування символів часто використовували шість бітів[en], а в 1960-х роках були поширеними пристрої, що оперували 6-бітовими та 9-бітовими байтами. Ці пристрої найчастіше мали слова пам'яті розміром 12, 24, 36, 48 чи 60 бітів, які відповідали двом, чотирьом, шістьом, вісьмом чи 10 6-бітовим байтам. У ту епоху, до того як термін «байт» став загальним, байти в потоці інструкцій часто згадувалися як силаби[en] (англ.syllables, «склади»).
Сучасний де-факто стандарт байта розміром вісім бітів затверджений у стандарті ISO/IEC 2382-1:1993, він є зручним степенем двійки, який дає змогу одному байту містити значення від 0 до 255 (28 = 256 чисел, включно з нулем)[7]. Міжнародний стандарт IEC 80000-13[en] кодифікував це загальне визначення. Багато видів додатків використовує інформацію, представлену восьма чи менше бітами. Популярність основних комерційних обчислювальних архітектур сприяла повсюдному прийняттю 8-бітного розміру[8]. Сучасні архітектури зазвичай використовують 32- чи 64-бітні слова, які складаються з чотирьох чи восьми байтів відповідно.
Символьним позначенням байта є велика літера B латинського алфавіту, запропонована Міжнародною електротехнічною комісією (IEC) та Інститутом інженерів з електротехніки та електроніки (IEEE)[9] на противагу біту, IEEE-символом якого є мала літера b латинського алфавіту. Одиниця октет (символьне позначення o) прямо вказує на послідовність з восьми бітів, усуваючи таким чином неоднозначність стосовно розміру байта[10][11].
За іншою версією автором терміну байта як позначення груп бітів, менших розміром за машинні слова (зокрема для груп з чотирьох бітів) є Луї Дж. Дулі (англ.Louis G. Dooley), який стверджував, що придумав цей термін під час роботи з Жюлем Шварцем[en] (англ.Jules Schwartz) і Діком Білером (англ.Dick Beeler) над системою протиповітряної оборони під назвою SAGE[en] в Лабораторії Лінкольна близько 1956/1957 років, яка розроблювалася спільно компаніями RAND, MIT та IBM[19][20]. Пізніше в мові програмування JOVIAL, створеній командою на чолі зі Шварцем, використовувався цей термін, проте Шварц невпевнено згадував, що цей термін був запозичений із системи обробки даних AN/FSQ-31[en][21][20].
Ранні комп'ютери використовували різні 4-бітні двійково-десяткові (BCD) представлення і 6-бітні коди для друку графічних шаблонів, які були розповсюдженими в Армії США (FIELDATA[en]) і ВМС США. Ці представлення включали буквено-цифрові символи та спеціальні графічні символи. 1963 року ці набори розширено до системи із семи бітів кодування, яка дістала назву American Standard Code for Information Interchange (ASCII, Американський стандартний код для інформаційного обміну) і яку ухвалили як Федеральний стандарт обробки інформації, який замінив собою несумісні коди телепринтерів, що використовувалися різними філіями уряду США та університетів протягом 1960-х років. ASCII містив у собі літери алфавіту в нижньому та верхньому регістрі і набір керівних символів для полегшення передання письмової мови та таких функцій пристроїв друку як перехід на новий рядок, а також фізичний або логічний контроль над потоком даних через засоби передання даних[17]. На початку 1960-х років, водночас активно беручи участь у стандартизації ASCII, компанія IBM представила у своїй власній продуктовій лінії System/360 восьмибітовий «розширений двійково-десятковий код обміну інформацією» (англ.Extended Binary Coded Decimal Interchange Code, EBCDIC), розширення їхнього 6-бітового двійково-десяткового коду (BCDIC), який використовувався в попередніх перфокартах[22]. Популярність серії System/360 призвела до повсюдного прийняття 8-бітного розміру пам'яті[17][15][12].
Для явного позначення восьми бітів використовується термін октет[17][11]. Історично для позначення восьми бітів у Західній Європі також використовувався термін октад (англ.octad, octade)[23][24].
Для вимірювання обсягу даних використовують похідні терміни, що утворюються додаванням префіксу (див. таблицю «Кількість байтів»).
Різниця між десятковим і двійковим представленням префіксів
Іноді на практиці (переважно у сфері інтернет-послуг та виробництві накопичувачів інформації) через плутанину двійкових префіксів з десятковими відношення похідних одиниць до основної відрізняється від прийнятих в програмуванні, що призводить до похибок під час обчислення:
Префікс
Десяткове значення
Двійкове значення
Похибка
к
кіло
103 = 1000
210 = 1024
2,40 %
M
мега
106 = 10002
220 = 10242
4,86 %
Г
гіга
109 = 10003
230 = 10243
7,37 %
T
тера
1012 = 10004
240 = 10244
9,95 %
Символьне позначення байта
У стандартах IEC 80000-13, IEEE 1541 та Метричному форматі обміну (англ.Metric Interchange Format)[9] у якості символьного позначення байта затверджена велика літера B латинського алфавіту. З іншого боку, стандарт IEEE 1541 визначає малу літеру b латинського алфавіту як символьне позначення біта, проте стандарт IEC 80000-13 та Метричний формат обміну застосовують слово bit для позначення біта.
Мови програмування C та C++ дають визначення типу даних byte як «одиниці адресації сховища даних, достатньо великій, щоб зберігати будь-який із символів базового набору символів середовища виконання» (пункт 3.6 стандарту C). Стандарт C вимагає, щоб цілочисельний тип даних unsigned char містив принаймні 256 різних значень, і був представленим принаймні вісьмома бітами (пункт 5.2.4.2.1). Різні реалізації C та C++ резервують 8, 9, 16, 32 чи 36 бітів для зберігання байта[25][26]. Крім того, стандарти C та C++ вимагають, щоб між двома байтами не було жодних «проміжків». Це означає, що кожен біт в пам'яті є частиною байта[27].
У мові програмування Java примітивний тип даних byte завжди визначається як такий, що містить 8 бітів і є знаковим типом даних, який може містити значення від −128 до 127.
Мови програмування .NET, як-от C#, визначають як беззнаковий тип даних byte, так і знаковий sbyte, які містять значення від 0 до 255 та від −128 до 127 відповідно.
У системах передавання даних дане визначення байта як нерозривної послідовності бітів в послідовному потоці даних, який являє собою найменшу відмітну одиницю даних. Одиниця передання може включати старт-біти, стоп-біти чи біти парності, і таким чином може варіюватися від 7 до 12 бітів, щоб містити один 7-бітний код ASCII[28].
↑ абBuchholz, Werner (11 червня 1956). 7. The Shift Matrix. The Link System(PDF). IBM. с. 5—6. Stretch Memo No. 39G. Архів оригіналу(PDF) за 4 квітня 2017. Процитовано 27.04.2019.
↑Rao, Thammavaram R. N.; Fujiwara, Eiji (1989). McCluskey, Edward J. (ред.). Error-Control Coding for Computer Systems. Prentice Hall Series in Computer Enginering (вид. 1). Englewood Cliffs, NJ, USA: Prentice Hall. ISBN0-13-283953-9. LCCN88-17892. (NB. Example of the usage of a code for «4-bit bytes».)
↑Tafel, Hans Jörg (1971). Написано у RWTH, Aachen, Germany. Einführung in die digitale Datenverarbeitung [Introduction to digital information processing] (German) . Munich, Germany: Carl Hanser Verlag. с. 300. ISBN3-446-10569-7.
↑ISO/IEC 2382-1: 1993, Information technology – Vocabulary – Part 1: Fundamental terms. 1993.
↑Buchholz, Werner (31 липня 1956). 5. Input-Output. Memory Word Length(PDF). IBM. с. 2. Stretch Memo No. 40. Архів оригіналу(PDF) за 4 квітня 2017. Процитовано 27.04.2019.
↑Blaauw, Gerrit Anne; Brooks, Jr., Frederick Phillips; Buchholz, Werner (June 1959). Processing Data in Bits and Pieces. IRE Transactions on Electronic Computers: 121.