Big­endian / Middle­endian / Little­endian  26 de Gener de 2015 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Big­endian i Little­end...
 
Big­endian / Middle­endian / Little­endian  26 de Gener de 2015 
 
Definicions dels formats
El terme anglès Endianness (...
 
Big­endian / Middle­endian / Little­endian  26 de Gener de 2015 
 
3. De mida 4 bytes en format big­endian 
Valor de la ...
 
Big­endian / Middle­endian / Little­endian  26 de Gener de 2015 
 
3. De mida 4 bytes en format little­endian 
Valor de ...
 
Big­endian / Middle­endian / Little­endian  26 de Gener de 2015 
 
Avantatges dels formats Big-endian i Little-endian
Bi...
 
Big­endian / Middle­endian / Little­endian  26 de Gener de 2015 
 
En un programa, què considera la meva màquina una dad...
 
Big­endian / Middle­endian / Little­endian  26 de Gener de 2015 
 
Bé, doncs per una determinada execució, la sortida de...
 
Big­endian / Middle­endian / Little­endian  26 de Gener de 2015 
 
Llicència del document
 
Per a fer ús d’aquest docume...
Próxima SlideShare
Cargando en…5
×

Big-endian / Little-endian [Català]

82 visualizaciones

Publicado el

Es tracta d'uns apunts personals que tenen per objectiu explicar els formats big-endian i little-endian.

Publicado en: Software
0 comentarios
0 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

Sin descargas
Visualizaciones
Visualizaciones totales
82
En SlideShare
0
De insertados
0
Número de insertados
6
Acciones
Compartido
0
Descargas
2
Comentarios
0
Recomendaciones
0
Insertados 0
No insertados

No hay notas en la diapositiva.

Big-endian / Little-endian [Català]

  1. 1.   Big­endian / Middle­endian / Little­endian  26 de Gener de 2015                                  Big­endian i Little­endian                                              Ferran Verdés Castelló  ferranverdes@gmail.com  www.ferranverdes.cat  Primera versió    Ferran Verdés Castelló   Pàgina 1 de 8   
  2. 2.   Big­endian / Middle­endian / Little­endian  26 de Gener de 2015    Definicions dels formats El terme anglès Endianness (en català, extremitat) s’utilitza per designar el format en que                            s’espera trobar aquelles dades que tenen una mida superior a un byte. Per format, ens                              referim al criteri d’ordenació que s’ha emprat per emmagatzemar el conjunt de bytes que                            component la dada.     Existeixen tres tipus de formats:  ● Big­endian: S’escriu a la primera posició el byte més significatiu de la dada.  ● Little­endian: S’escriu a la primera posició el byte menys significatiu de la dada.   ● Middle­endian o Mixed­endian: És la combinació dels dos formats anteriors.     Procedim a comentar­los un per un.  Big-endian El sistema big­endian consisteix en representar els bytes d’una dada en l’orde “natural”, és a                              dir, de la manera en que estem acostumats a treballar, del byte més significatiu al menys                                significatiu. I que vol dir el byte més significatiu? La millor manera d’entendre­ho és amb l’ús                                d’exemples, així que anem a imaginar­nos que volem representar una dada amb les                          següents característiques:    1. De mida 1 byte en format big­endian  Valor de la dada en format hexadecimal: 0x3A  S’obtindria:     *Nota: El número d’adreça de memòria és irrellevant.    2. De mida 2 bytes en format big­endian  Valor de la dada en format hexadecimal: 0x3A47  S’obtindria:            Ferran Verdés Castelló   Pàgina 2 de 8   
  3. 3.   Big­endian / Middle­endian / Little­endian  26 de Gener de 2015    3. De mida 4 bytes en format big­endian  Valor de la dada en format hexadecimal: 0x3A479B2C  S’obtindria:      Com veiem, l’ordre d’emmagatzemament dels bytes és idèntic a l’ordre en que representem                          els valors en hexadecimal, i això fa que aquest format sigui el més intuïtiu.     Les arquitectures de microprocessadors desenvolupades per Motorola utilitzen aquest criteri                    d’ordenació, així com el protocol de transport TCP.  Little-endian El sistema little­endian és justament “l’invers” del sistema big­endian, el byte menys                        significatiu és el que s’emmagatzemarà a la primera posició disponible. Igual que en el cas                              anterior, anem a observar com s’estructura aquest format mitjançant exemples:    1. De mida 1 byte en format little­endian  Valor de la dada en format hexadecimal: 0x3A  S’obtindria:       2. De mida 2 bytes en format little­endian  Valor de la dada en format hexadecimal: 0x3A47  S’obtindria:             Ferran Verdés Castelló   Pàgina 3 de 8   
  4. 4.   Big­endian / Middle­endian / Little­endian  26 de Gener de 2015    3. De mida 4 bytes en format little­endian  Valor de la dada en format hexadecimal: 0x3A479B2C  S’obtindria:      Els processadors de la casa Intel, com els de la familia x86 i x86_64, utilitzen aquest format.   Middle-endian El sistema middle­endian, també anomenat mixed­endian, és la representació d’una                    determinada combinació dels dos formats anteriors. Un exemple n’és l’arquitectura PDP­11,                      la qual tracta les dades de 4 bytes considerant dos blocs de 2 bytes, on els bytes continguts                                    pels dos blocs es troben en format little­endian mentre que l’ordenació pròpiament dels blocs                            està en big­endian. És a dir:    1. Dada de mida 4 bytes en l’arquitectura PDP­11  Valor de la dada en format hexadecimal: 0x3A479B2C  S’obtindria:        Fins aquí, hem pogut apreciar que l’ordre d’emmagatzemament dels bytes és diferent per a                            cada format, però cal remarcar que aquest fet només succeeix quan la dada té una mida                                superior a un byte. Cal comentar també, que l’ordenació dels bits dins de cada byte no es veu                                    alterada per a les arquitectures de microprocessador més comunes, sempre es representa                        del bit més significatiu al bit menys significatiu si considerem que llegim el byte d’esquerra a                                dreta.    Bé, ara ja sabem que una dada es pot emmagatzemar d’una manera o una altra en funció                                  d’un criteri d’ordenació dels seus bytes. Però, exactament, que és i que deixa de ser una                                dada? Aquesta qüestió és objecte de l’últim punt del document.    Ferran Verdés Castelló   Pàgina 4 de 8   
  5. 5.   Big­endian / Middle­endian / Little­endian  26 de Gener de 2015    Avantatges dels formats Big-endian i Little-endian Big-endian   ● Es pot comprovar de forma directa i sense saber la longitud d’un número si aquest és                                un nombre positiu o negatiu, ja que recordem que el signe s’emmagatzema al bit més                              significatiu.     ● La representació dels números coincideix amb la forma en que són escrits, de manera                            que les rutines de conversió entre diferents sistemes de numeració són més eficients.    ● És capaç d’ordenar més ràpidament cadenes de valors, ja que llegeix abans els bytes                            més significatius i no es veu obligat a llegir en tots els casos la xifra completa per a                                    realitzar l’ordenació.     ● És el format utilitzat pel protocol TCP/IP i també per a qualsevol mètode de                            transmissió, ja que si per alguna causa la transmissió s’interromp els bytes ja enviats                            són els de major importància i per tant, l’error és menor.    ● La majoria dels formats d’imatge s’emmagatzemen en aquest format.    Little-endian   ● La relació 1:1 entre el offset i el número de byte fa que les rutines matemàtiques                                siguin més fàcils d’implementar.     ● Les operacions aritmètiques d’altra precisió es realitzen de forma més ràpida.    ● Si es desitja extendre la mida d’un nombre únicament cal utilitzar més posicions de                            memòria sense la necessitat de reorganitzar els bytes.                     Ferran Verdés Castelló   Pàgina 5 de 8   
  6. 6.   Big­endian / Middle­endian / Little­endian  26 de Gener de 2015    En un programa, què considera la meva màquina una dada? Per arribar a alguna conclusió, primer de tot, he comprovat el format amb que treballa la                                meva màquina mitjançant la comanda:    lscpu | grep "Byte Order"    Com era d’esperar, pel fet de tenir un processador de la familia Intel x86_64, el resultat ha                                  estat little­endian. A partir d’aquí, he escrit quatre línies de codi en C++ que hem permeten                                crear una instància d’una classe i veure com aquesta s’emmagatzema a memòria:        El codi es mereix comentar dues coses. La primera, és que el valor màxim al que                                s’incrementarà la variable i serà menor que (12 + 4 + 8), el qual representa la mida del array                                      conjuntament amb la d’un int i la d’un long. Aquest valor, segons la meva màquina, que té                                  una paraula de 64 bits, és suficient per recórrer totes les variables emmagatzemades a                            memòria, pel fet que l’ordre en que s’han definit els atributs dins la classe no requereix que el                                    compilador utilitzi cap tipus de padding addicional (amb l’objectiu de mantenir una correcta                          alineació dels valors). En segon lloc, cal comentar que la declaració char nameArr[12] {0}                            correspon a la versió de C++11.          Ferran Verdés Castelló   Pàgina 6 de 8   
  7. 7.   Big­endian / Middle­endian / Little­endian  26 de Gener de 2015    Bé, doncs per una determinada execució, la sortida del programa ha estat la següent:        Com podem veure, cada tipus primitiu és considerat una dada. Tant l’atribut int com l’atribut                              long s’han emmagatzemat en format little­endian. I de fet, també ha estat així per a cada                                caràcter char que pertany a l’atribut nameArr, però com que la mida d’aquest tipus no és                                superior a un byte no podem apreciar­ho. A on no s’ha capgirat l’ordre dels bytes és a l’array                                    de caràcters, el qual no és un tipus primitiu sinó que està composat per un conjunt de tipus                                    primitius.     Val a dir però, que a més dels tipus primitius també hi ha altres casos en que el meu                                      computador utilitza el format little­endian per salvar els valors, com per exemple, pel contingut                            dels punters. Les adreces de memòria que contenen també s’emmagatzemen en el format                          pertinent de la màquina.        Ferran Verdés Castelló   Pàgina 7 de 8   
  8. 8.   Big­endian / Middle­endian / Little­endian  26 de Gener de 2015    Llicència del document   Per a fer ús d’aquest document, heu de respectar la següent llicència:      Llicència de Creative Commons Reconeixement­NoComercial­CompartirIgual 4.0 Internacional              Ferran Verdés Castelló   Pàgina 8 de 8   

×