Big endian & little endian ?

clampinclampin Membre
17:50 modifié dans Actualités #1
Salut,

Je lis de plus en plus les termes de Big endian et little endian (ou un truc pareil), a propos des processeur et surtout pour la programmation.

Qu'est ce que cette chose dans le coeur de nos machine ?

Si quelqu'un pouvait expliquer simplement ce bidule ?

Merci

Réponses

  • BruBru Membre
    janvier 2006 modifié #2
    C'est la façon dont les "mots" sont stockés en mémoire et dans des flux d'octets.
    Un mot est une valeur faisant plus de 8 bits.

    Un mot de 16 bits fait donc 2 octets (c'est un short).
    Un mot de 32 bits fait 4 octets (le int).
    Un mot de 64 bits fait 8 octets (le long long).

    Maintenant, selon l'architecture du microprocesseur, l'ordre des octets formant le mot change.

    Sur les architectures little-endian, les octets les moins significatifs sont en premier, les plus significatifs en dernier. Typiquement, c'est le cas des Intel.

    Sur les big-endian, les octets les plus significatifs sont en premier, et les moins significatifs sont en dernier. C'est le cas des 680x0 et des PPC.

    Pour faire un paralèlle avec notre système décimal, le nombre 123 (1*100 + 2*10 + 3) est big-endian.
    En little-endian, il se présenterait ainsi : 3 2 1 (3 + 2*10 + 1*100).




    EDIT :

    La manière de dire le nombre 21 en français et en allemand suit cette logique.

    Les français disent VINGT ET UN : c'est du big-endian (VINGT est plus significatif que UN et il est en premier).

    Les teutons, eux, disent EIN UND ZWANZIG (littéralement UN ET VINGT). C'est du little-endian (EIN -1- est moins significatif que ZWANZIG -20-, et il est en premier).

    .
  • muqaddarmuqaddar Administrateur
    17:50 modifié #3
    Merci bru, très bonne explication.
  • AliGatorAliGator Membre, Modérateur
    17:50 modifié #4
    Attention petite précision, les bits à  l 'intérieur des octets sont toujours avec le bit de poids fort en premier.
    Ce n'est que l'ordre des octets qui change.
    Par exemple le short 769 (=3*256+1) s'écrira "00000011 00000001" en BigEndian et "00000001 00000011" en LittleEndian, mais jamais "10000000 11000000"
  • BruBru Membre
    17:50 modifié #5
    dans 1136883031:

    Attention petite précision, les bits à  l 'intérieur des octets sont toujours avec le bit de poids fort en premier.
    Ce n'est que l'ordre des octets qui change.
    Par exemple le short 769 (=3*256+1) s'écrira "00000011 00000001" en BigEndian et "00000001 00000011" en LittleEndian, mais jamais "10000000 11000000"


    C'est exact !
    J'ai édité le message en conséquence.

    .
  • tabliertablier Membre
    17:50 modifié #6
    Petite précision: le littleEndian à  été fait pour gagner du temps dans les additions et soustractions entre chiffre en mémoire. Les pointeurs de mémoires progressant  généralement d'adresses faibles vers adresses fortes.  Faire des additions et soustractions avec des BigEndian n'est pas simple car il faut prévoir des pointeurs de mémoire comptants et décomptants:

    exemples les octets N+1 à  N+3 contiennent le chiffre 231 en bigendian.
    N+0  N+1  N+2  N+3  N+4
    ?        2      3      1      ?
    Pour additionner ce chiffre à  un autre chiffre, le pointeur étant en N+0, devra pointé successivement les octets  N+0, N+3, N+2, N+1, puis sauter en N+4!

    Même exemple pour le Littleendian et le chiffre 231
    N+0  N+1  N+2  N+3  N+4
    ?        1      3      2      ?
    Pour additionner ce chiffre, le pointeur étant en N+0, devra pointé successivement les octets  N+0, N+1, N+2, N+3, et continuer en N+4.

    On voit que la microprogrammation interne du microProcesseur sera bien plus simple pour du littleEndian et par conséquent plus rapide (probablement) et moins pénalisante en nombre de transistors mis en oeuvre.
  • clampinclampin Membre
    17:50 modifié #7
    Merci pour vos réponse, j'en sais un peu plus....
Connectez-vous ou Inscrivez-vous pour répondre.