Endianita: Porovnání verzí

Smazaný obsah Přidaný obsah
Addbot (diskuse | příspěvky)
m Bot: Odstranění 24 odkazů interwiki, které jsou nyní dostupné na Wikidatech (d:q339338)
G3robot (diskuse | příspěvky)
m oprava opakovaných referencí (data z WP:WCW), odstranění nadbytečného odřádkování
Řádek 13:
 
Little endian má jednu dobrou vlastnost. Jedna a ta samá hodnota může být z paměti načtena pro různou délku, bez změny adresy. Například 32 bitový řetězec FF 00 00 00 může být načten ze stejné adresy jako 8 bitový (hodnota = FF), 16bitový (00FF), 24bitový (0000FF), 32bitový (000000FF); jejich hodnota stále zůstává 255. Tato vlastnost je však velmi zřídka využívána programátory, kteří pracují s vyššími programovacími jazyky, proto se ponechává kompilátoru.
 
 
Např. 32[[bit]]ové číslo <code>0x4A3B2C1D</code> se na adresu <code>100</code> uloží takto:
Řádek 170 ⟶ 169:
=== Použití struktury union ===
Následujícím způsobem lze přehazovat bajty libovolně dlouhého datového typu. Daň, kterou si tato obecnost bere, je rychlost. Proto je daleko vhodnější použít některou z výše uvedených možností (instrukce, výpočet).
Další problém, který může nastat, je, že musíme zajistit přesný počet bajtů daného datového typu. Není definované, že např. <code>int</code> musí mít přesný počet bitů (je definována pouze jeho dolní hranice).<ref>[http://en.wikipedia.org/wiki/Integer_%28computer_science%29 Integer computer science]</ref><ref name="rfr1">[http://en.wikipedia.org/wiki/Limits.h limits.h]</ref>
 
<source lang="C">
Řádek 216 ⟶ 215:
 
<source lang="C">
#include <sys/param.h>
 
#ifdef __BYTE_ORDER
Řádek 250 ⟶ 249:
</source>
 
Ve výše uvedeném kódu je do proměnné <code>i</code> (která má 32 bitů)<ref>[http://en.wikipedia.org/wiki/Limits.h limits.h]<name="rfr1" /ref> uložena hodnota 1. V závislosti na dané platformě (endianitě), se číslo uloží bud jako 0x00000001 (big-endian) nebo jako 0x01000000 (little-endian) a pouze se kontroluje, jakou hodnotu obsahuje první bajt proměnné <code>i</code>.
 
===== Použití struktury union (Harbison and Steele) =====