Bajt

Wielokrotności bajtów
Przedrostki dziesiętne
(SI)
Przedrostki binarne
(IEC 60027-2)
NazwaSymbolMnożnikNazwaSymbolMnożnik
kilobajtkB103   = 10001kibibajtKiB210 = 10241
megabajtMB106   = 10002mebibajtMiB220 = 10242
gigabajtGB109   = 10003gibibajtGiB230 = 10243
terabajtTB1012 = 10004tebibajtTiB240 = 10244
petabajtPB1015 = 10005pebibajtPiB250 = 10245
eksabajtEB1018 = 10006eksbibajtEiB260 = 10246
zettabajtZB1021 = 10007zebibajtZiB270 = 10247
jottabajtYB1024 = 10008jobibajtYiB280 = 10248

Bajt (dop. bajtu lub bajta[1]) – najmniejsza adresowalna jednostka informacji pamięci komputerowej, składająca się z bitów.

Zwykle przyjmuje się, że jeden bajt to 8 bitów[2], choć to nie wynika z powyższej definicji. W związku z tym, w praktyce jeden bajt może zawierać dowolną liczbę bitów. Aby uniknąć niejednoznaczności, jednostka składająca się z ośmiu bitów zwana jest również oktetem. Bywa też, że bajt definiuje się jako 8 bitów, a najmniejszą adresowalną jednostkę pamięci – jako znak (ang. char).

W starszych maszynach nie stosowano pojęcia bajt ani oktet, najmniejszą jednostką było słowo maszynowe (np. 24-bitowe w maszynach standardu ICL, jak polskie Odry, albo 60-bitowe w maszynach CDC, czy 36-bitowe w Honeywell). W Odrach serii 1300 rozkazy działające na znakach adresowały pojedynczy znak używając specjalnego dla nich trybu adresowania (dodatkowych 2 bitów adresu znaku w słowie).

Ośmiobitowy bajt można podzielić na dwa czterobitowe nibble lub nybble (od ang. nibble – kęsek) bądź tetrady. Wyróżnia się mniej znaczący (dolny) i bardziej znaczący (górny) nibble/tetradę, składające się odpowiednio z bitów 0–3 i 4–7. Spotyka się też określenie strefa i cyfra wywodzące się od kodowania znaków kodem EBCDIC, oznaczające odpowiednio starszą i młodszą tetradę. Określenia nibble używa się często przy operacjach w kodzie BCD lub skompresowanym BCD.

Historia

Jako pierwszy, terminu bajt użył Werner Buchholz w lipcu 1956 podczas projektowania komputera IBM Stretch[3][4]. Początkowo oznaczał dane 4-bitowe, co pozwalało na zapis 16 różnych liczb, lecz na etapie produkcji został zredukowany do 3 bitów (8 różnych liczb) – główne operacje komputerowe wykorzystywały bajt 3-bitowy. Bajt 8-bitowy został upowszechniony jako standard wraz z pojawieniem się komputera IBM System/360. Słowo bajt (ang. byte) powstało od angielskiego bite (kęs), jako najmniejsza porcja danych, którą komputer może „ugryźć” za jednym razem (czyli pobrać, zapisać, przetworzyć). Dzięki temu unikano pomyłek z bitem, jednak było to także spowodowane skłonnością ówczesnych naukowców do przeobrażania i tworzenia nowych nazw. Bajt również był nazywany „8-bitowym bajtem” dla podkreślenia, że jest zestawem n bitów, gdyż może składać się także z innej ich liczby:

  1. Sekwencja sąsiadujących bitów w szeregowym strumieniu danych (modemy, komunikacja satelitarna lub dane z głowicy dysku twardego), która jest najmniejszą jednostką informacji. Takie bajty mogą zawierać bity startu, bity stopu, bity parzystości, składając się z 7 do 12 bitów, wśród których zawarty jest pojedynczy 7-bitowy kod ASCII.
  2. Typ danych w określonych językach programowania. Język C oraz C++ definiują bajt jako „adresowalna jednostka danych, na tyle duża, by można było do niej przypisać każdy znak z zestawu znaków środowiska wykonawczego” (paragraf 3.6 standardu C). Typ danych char języka C musi zawierać co najmniej 8 bitów (paragraf 5.2.4.2.1), stąd bajtem może być jedna z 256 różnych wartości (bez względu na to, czy dana to signed char czy unsigned char). Różne implementacje języka C i C++ definiują bajt jako daną 8-, 9-, 16-, 32- lub 36-bitową[5][6]. Właściwa liczba bitów w poszczególnych implementacjach jest podana jako wartość CHAR_BIT w pliku nagłówkowym limits.h. W Javie bajt jest zawsze zdefiniowany jako 8-bitowy, będący typem danych ze znakiem (ang. signed data type), stąd obejmuje wartości od -128 do 127.

Wczesne mikroprocesory, takie jak Intel 8008 (poprzednik 8080 i 8086), mogły wykonywać niektóre operacje na 4 bitach, takie jak np. DAA (ang. Decimal Adjust after Addition) oraz ustawianie flagi half carry (połowicznego przeniesienia), które służyły do implementacji arytmetyki dziesiętnej[7]. Te 4-bitowe typy danych nosiły nazwę nibble (kęsek).

Historyczne dokumenty IETF opisują różne przykłady bajtów. RFC 608 podaje rozmiar bajta dla hostów FTP (atrybut FTP-BYTE-SIZE w tablicy hostów ARPANET) jako 36 bitów dla komputerów PDP-10 i 32 bity dla IBM 360[8].

Oznaczenia

Najczęściej stosowanym skrótem dla bajta jest wielka litera B (w odróżnieniu od bitu oznaczanego małą literą b). Takie oznaczenie koliduje wprawdzie z oznaczeniem bela, ale nie sprawia to większych problemów: bela używa się przeważnie z przedrostkiem decy, decybel [dB], niestosowanego (podobnie jak innych podwielokrotności) do bajtów, a poza tym jednostki te występują wyjątkowo rzadko obok siebie.

Można się także spotkać z oznaczeniem bajta małą literą b (bit oznacza się wtedy słowem bit), jednak pokrywa się ono z najpowszechniejszym oznaczeniem bitu i nie jest zalecane.

Przedrostki

Stosowanie przedrostków kilo, mega, giga itd. jako do określania odpowiednich potęg liczby dwa jest niezgodne z wytycznymi układu SI (słowo kilo oznacza 1000, a nie 1024). W celu odróżnienia przedrostków o mnożniku 1000 od przedrostków o mnożniku 1024, w styczniu 1997 pojawiła się propozycja ujednoznacznienia, opracowana przez IEC, polegająca na dodawaniu litery i po symbolu przedrostka dwójkowego oraz bi po jego nazwie. Nowe przedrostki nazywane zostały przedrostkami dwójkowymi (binarnymi). Jednak ta propozycja rozwiązania problemu niejednoznaczności przedrostków nie została przyjęta przez wszystkie środowiska. Przykładowo producenci nośników pamięci i urządzeń sieciowych (z powodów marketingowych) wolą korzystać z przedrostków układu SI, co bywa źródłem nieporozumień względem faktycznej pojemności pierwszych i prędkości drugich – które podawane są w bitach na sekundę.

Zobacz też

Przypisy

  1. Mirosław Bańko: Bity i bajty. Poradnia językowa PWN. [dostęp 2009-02-22].
  2. bajt, [w:] Encyklopedia PWN [online] [dostęp 2021-10-15].
  3. Timeline Of The IBM Stretch/Harvest Era (1956–1961). computerhistory.org. [dostęp 2009-06-16]. (ang.).
  4. byte. catb.org. [dostęp 2009-06-16]. (ang.).
  5. Marshall Cline: C++ FAQ Lite. 2 stycznia 2009. [dostęp 2009-06-16]. (ang.).
  6. Jack Klein: Integer Types In C and C++. 2008. [dostęp 2011-08-05]. [zarchiwizowane z tego adresu (2016-06-10)]. (ang.).
  7. Gary Syck, Turbo Assembler®. Biblia użytkownika, Warszawa: LT&P, 1994, s. 156, ISBN 83-901237-2-X.
  8. M.D. Kudlick, Host names on-line, RFC 608, IETF, styczeń 1974, DOI10.17487/RFC0608, ISSN 2070-1721, OCLC 943595667 (ang.).