Codage entiers/réels =f(architecture)
Répondre à la discussion
Affichage des résultats 1 à 12 sur 12

Codage entiers/réels =f(architecture)



  1. #1
    invite2c34fdbc

    Codage entiers/réels =f(architecture)


    ------

    Bonjour à tous,

    Je me demandais : le codage d'un int dépend-il de l'architecture du µP ? J'imagine qu'un int sur un µP 32 bits est codé sur 32 bits, mais quand est-il sur un processeur 16 bits ? Ou 64 Bits ?
    En ce qui concerne les doubles, sont-ils tous codés en 64 bits virgule flottante/32 bits virgule fixe sur toutes les architectures ?

    Merci d'avance

    -----

  2. #2
    WizardOfLinn

    Re : Codage entiers/réels =f(architecture)

    Le codage des nombres en virgule flottante est normalisé depuis une trentaine d'année (IEEE 754), et ne devrait donc pas dépendre de l'architecture, sauf systèmes exotiques.
    Pour ce qui est des entiers, l'interprétation du type 'int' des langages de haut niveau peut dépendre du compilateur. Sur mon compilateur C++, 'int' est toujours 32 bits même quand je compile pour une machine 64 bits (ce sont les pointeurs qui passent à 64 bits).

  3. #3
    Jack
    Modérateur

    Re : Codage entiers/réels =f(architecture)

    Et tout ça sans parler d'endianness.

  4. #4
    invite1c6b0acc

    Re : Codage entiers/réels =f(architecture)

    Dans ma jeunesse, sur les compilateurs microsoft, les int faisaient 16 bits. (et 32 sur l'Amiga 2000)
    En principe, ça correspondait à la longueur du mot machine, mais aujourd'hui ils ne font que 32 bits sur mon architecture 64 bits.
    Rien n'est parfait ...

    Je crois qu'il vaut mieux utiliser les types de stdint.h, et ne se servir d'int que pour respecter certaines fonctions standard (comme open(), par exemple).

  5. A voir en vidéo sur Futura
  6. #5
    inviteb9f49292

    Re : Codage entiers/réels =f(architecture)

    le codage d'un int dépend-il de l'architecture du µP ?
    comme le soulignais les autres, c'est l'architecture du micro, le compilateur (et éventuellement le système d'exploitation) qui détermine la taille de l'int.

    En ce qui concerne les doubles, sont-ils tous codés en 64 bits virgule flottante/32 bits virgule fixe sur toutes les architectures ?
    des non sens dans cette phrases... Les flottants en simple précision sont encodés sur 32 bits (type float), et 64 bits pour les flottants en double précision (type double). Mais attention, il y a beaucoup de plateforme où le float est transformé en double (si tu ne l'empêches pas explicitement au moment de la compilation). Quant à la virgule fixe, ce ne sont que des entiers que tu interprètes en nb à virgule.... ils peuvent donc être de 16, 32 ou 64 bits.

    Je crois qu'il vaut mieux utiliser les types de stdint.h, et ne se servir d'int que pour respecter certaines fonctions standard (comme open(), par exemple).
    Non c'est l'inverse, il faut utiliser les types classiques tout le temps, et stdint.h lorsque l'on doit maîtriser explicitement et de manière portable la taille des types donc en gros pour les protocoles de communications, l'enregistrement / lecture de fichier binaire, du calcul en virgule fixe...

  7. #6
    invite0bbe92c0

    Re : Codage entiers/réels =f(architecture)

    Citation Envoyé par Vykernes Voir le message
    Je me demandais : le codage d'un int dépend-il de l'architecture du µP ? J'imagine qu'un int sur un µP 32 bits est codé sur 32 bits, mais quand est-il sur un processeur 16 bits ? Ou 64 Bits ?
    En ce qui concerne les doubles, sont-ils tous codés en 64 bits virgule flottante/32 bits virgule fixe sur toutes les architectures ?
    Des réponses ont été fournies et presque tout a été dit sauf un point important : l'ordre des bits dans le codage qui est strictement dépendant du processeur.

    La grande majorité des processeurs actuels sont en "little-endian" mais d'autres sont en "big-endian" (plus dans les antiquités : Motorola 68000, Sun Sparc, IBM V370 ......)

    Certains processeurs sont bi-endian (PowerPC, ARM, MA-RISC, etc .... ), dans ce cas c'est l'OS où les circuits périphériques qui déterminent le mode de fonctionnement.

    Plus d'info là : http://fr.wikipedia.org/wiki/Endianness

    Concernant les nombres à virgule flottantes, c'est la normalisation IEEE 754 qui date de 85, je crois (mais qui était appliquée avant : je me souviens d'un compilateur Pascal que j'utilisais en 84 qui utilisait déjà le codage flottant IEEE - en revanche, sur le même système, j'avais un compilateur Basic qui utilisait un codage "maison" pour les float - un IEEE inversé au niveau exposant).

  8. #7
    Jack
    Modérateur

    Re : Codage entiers/réels =f(architecture)

    Des réponses ont été fournies et presque tout a été dit sauf un point important : l'ordre des bits dans le codage qui est strictement dépendant du processeur.
    Tu n'as donc pas vu mon message #3.
    De plus l'endianness ne concerne pas l'ordre des bits, mais celui des octets.

  9. #8
    invite2c34fdbc

    Re : Codage entiers/réels =f(architecture)

    Citation Envoyé par lou_ibmix_xi Voir le message
    comme le soulignais les autres, c'est l'architecture du micro, le compilateur (et éventuellement le système d'exploitation) qui détermine la taille de l'int.
    Mais alors quelle est la démarche pour savoir la taille d'un int ou d'un double s'il y a autant de paramètres en jeu ? Qui est prioritaire ?

    Exemple : sur un microcontrôleur, le int est-il de 32 bits ou est-il de la taille du mot ? Par exemple sur un 16F... de microchip ?

    Et tout ça sans parler d'endianness.
    @Jack: Eh bien je ne connaissais pas cette notion d'endianness, merci Je crois que j'ai déjà effleurer cette notion une fois sans m'en rendre compte, avec le vecteur d'entrée sur un microcontroleur motorola qui n'était pas au début mais à la fin du mapping (ou l'inverse..).

  10. #9
    bisou10

    Re : Codage entiers/réels =f(architecture)

    Mon cher Viykernes, si tu souhaites avoir ces informations, tu te réfères à la doc de ton compilateur ciblant le microcontroleur que tu utilises.

    Dans le cas d'un 16F, c'est XC8. Elle est disponible dans C:\Program Files\Microchip\XC8\docs - sous Windows. Tu as de la chance elle suit scrupuleusement celle de C99 sur ce point....

    Sérieusement, tout ca c'est normalisé. Pourquoi vouloir remettre en question des points clairs et précis ? RTFM !

  11. #10
    bisou10

    Re : Codage entiers/réels =f(architecture)

    Quand a ton problème d'endianess, ca n'a RIEN à voir avec la table de vecteurs de ton ColdFire ou MPC ou 68xxx.

  12. #11
    Jack
    Modérateur

    Re : Codage entiers/réels =f(architecture)

    le vecteur d'entrée sur un microcontroleur motorola qui n'était pas au début mais à la fin du mapping (ou l'inverse..).
    L'emplacement de la table des vecteurs d'interruption n'a aucun rapport avec l'endianness.
    Mais alors quelle est la démarche pour savoir la taille d'un int ou d'un double s'il y a autant de paramètres en jeu ?
    Regarder la doc du compilateur que tu utilises. C'est la seule référence valable.
    sur un microcontrôleur, le int est-il de 32 bits ou est-il de la taille du mot ?
    Ca ne veut rien dire, il existe des mots de toutes tailles.

    PS : je n'avais pas vu tes réponses bisou10. Ca fait double emploi du coup.
    Dernière modification par Jack ; 25/10/2014 à 01h30.

  13. #12
    invite1c6b0acc

    Re : Codage entiers/réels =f(architecture)

    Citation Envoyé par Jack Voir le message
    Regarder la doc du compilateur que tu utilises. C'est la seule référence valable.
    Et on peut le mesurer en utilisant l'opérateur sizeof

Discussions similaires

  1. Bijection entre l'ensemble des entiers naturels et des entiers pairs
    Par invite50baf54d dans le forum Mathématiques du supérieur
    Réponses: 5
    Dernier message: 04/07/2014, 23h02
  2. TPE sur le pixels, codage binaire, codage hexadécimal..
    Par invite2dd170e6 dans le forum TPE / TIPE et autres travaux
    Réponses: 0
    Dernier message: 09/11/2012, 17h16
  3. Les entiers naturels et les entiers relatifs
    Par invitec56f12d8 dans le forum Mathématiques du collège et du lycée
    Réponses: 10
    Dernier message: 28/05/2012, 16h12
  4. codage
    Par invitef4609854 dans le forum Électronique
    Réponses: 0
    Dernier message: 02/04/2007, 18h18
  5. TPE codage possible?
    Par inviteb893c8c2 dans le forum TPE / TIPE et autres travaux
    Réponses: 2
    Dernier message: 11/12/2005, 18h06