Kolejność bajtów
W sytuacjach, kiedy liczby całkowite lub jakiekolwiek inne dane zapisywane są przy użyciu wielu (przynajmniej dwóch) bajtów, nie istnieje jeden unikatowy sposób uporządkowania tych bajtów w pamięci lub w czasie transmisji przez dowolne medium i musi być użyta jedna z wielu konwencji ustalająca kolejność bajtów (ang. byte order lub endianness). Jest to analogiczne do zapisu pozycyjnego liczb lub kierunku pisma w różnych językach – ze strony lewej na prawą albo z prawej na lewą.
Big endian
edytujBig endian[1] (spotykane także grubokońcowość[2]) to forma zapisu danych, w której najbardziej znaczący bajt (zwany też górnym bajtem, z ang. high-order byte) umieszczony jest jako pierwszy[1].
Procesory, które używają formy big endian, to między innymi HP Intel Itanium, SPARC, Motorola 68000[3], PowerPC 970, IBM System/360, Siemens SIMATIC S7.
Jest ona analogiczna do używanego na co dzień przez ludzi sposobu zapisu liczb.
Procesor zapisujący 32-bitowe wartości w pamięci, przykładowo 0x4A3B2C1D pod adresem 100, umieszcza dane, zajmując adresy od 100 do 103 w następującej kolejności:
100
|
101
|
102
|
103
|
||
...
|
4A
|
3B
|
2C
|
1D
|
...
|
Przykładowe formaty plików, które zawierają dane w formacie big-endian[4]:
- Adobe Photoshop
- JPEG
- MacPaint
- Sun raster files
Little endian
edytujLittle endian[1] (spotykane także cienkokońcowość[2]) to forma zapisu danych, w której najmniej znaczący bajt (zwany też dolnym bajtem, z ang. low-order byte) umieszczony jest jako pierwszy[1]. Procesory, które używają formy little endian, to między innymi wszystkie z rodziny x86, DEC VAX.
Jest ona odwrotna do używanego na co dzień sposobu zapisu liczb.
Procesor zapisujący 32-bitowe wartości w pamięci, przykładowo 0x4A3B2C1D pod adresem 100, umieszcza dane zajmując adresy od 100 do 103 w następującej kolejności:
100
|
101
|
102
|
103
|
||
...
|
1D
|
2C
|
3B
|
4A
|
...
|
Przykładowe formaty plików, które zawierają dane w formacie little-endian[4]:
Procesory z możliwością zmiany kolejności bajtów
edytujPrócz procesorów, które mają na stałe zaimplementowaną kolejność bajtów, istnieją również takie, w których można przełączyć tryb kolejności (tzw. bi-endian[1]). Należą do nich:
- Alpha
- ARM od wersji 3 wzwyż
- IA-64
- MIPS
- PA-RISC
- PowerPC (do serii PowerPC G4)
- SPARC V9
- SuperH SH-4.
Przykładowe formaty plików, które wspierają dane w obu formatach[4]:
- Microsoft WAV
- Microsoft AVI
- TIF files
- XWD (X windows Dump)
- flac
Etymologia
edytujAngielskie nazwy big endian i little endian pochodzą z książki Jonathana Swifta Podróże Guliwera i odnoszą się do mieszkańców Liliputu, których spór o to czy ugotowane jajko należy tłuc od grubego (tępego), czy od cienkiego (ostrego) końca, doprowadził do podziału na dwa stronnictwa toczące ze sobą niekończące się, choć bezsensowne, dysputy i wojny[5][3].
Zobacz też
edytujPrzypisy
edytuj- ↑ a b c d e Hook 2005 ↓, s. 81.
- ↑ a b Ogrodzki 2005 ↓, s. 44.
- ↑ a b Null i Lobur 2006 ↓, s. 245.
- ↑ a b c Null i Lobur 2006 ↓, s. 247.
- ↑ Saltzer i Kaashoek 2009 ↓, s. 158.
Bibliografia
edytuj- Byte Ordering and Endianess, [w:] Brian Hook , Write portable code. A guide to developing software for multiple platforms, San Francisco 2005 .
- Jerome H. Saltzer , M. Frans Kaashoek , Principles of Computer System Design. An introduction, Morgan Kaufmann, 2009 .
- Linda Null , Julia Lobur , The Essentials of Computer Organization and Architecture, Second Edition, Jones and Bartlett Publishers, 2006, ISBN 978-0-7637-3769-6 .
- Jan Ogrodzki , Wstęp do systemów komputerowych, Warszawa: Oficyna Wydawnicza Politechniki Warszawskiej, 2005, ISBN 83-7207-529-8 .