IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Cast et little/big endian


Sujet :

C

  1. #1
    Membre éclairé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Points : 763
    Points
    763
    Par défaut Cast et little/big endian
    J'ai un code qui fait une multiplication de deux nombres 32 bits, qui sort un résultat sur 64, et que je caste dans un 32 bits. Ma question, hyper simple, si ma machine est little endian, je récupère les 32 bits de poids faibles, et si c'est du big endian ?

  2. #2
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    caste dans un 32 bits
    C'est à dire? Tronquer?
    ou appliquer un format différent qui conserve l'ordre de grandeur?

  3. #3
    Membre éclairé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Points : 763
    Points
    763
    Par défaut
    Caster c'est caster...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c=(_int32)(a*b) avec a et b des _int32

  4. #4
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    <fausses declarations effacees>

  5. #5
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Si a et b sont effectivement des entiers 32 bits, alors le resultat sera sur 32 bits
    A moins que la multiplication soit gérée "à la main" par des fonctions spécifiques.

  6. #6
    Membre éclairé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Points : 763
    Points
    763
    Par défaut
    Une multiplication 32*32 te génère un résultat sur 64, c'est la base de la multiplication binaire. En l'occurence, au niveau système, c'est stocké dans mon cas dans deux registres 32 bits.

  7. #7
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par progman
    Une multiplication 32*32 te génère un résultat sur 64, c'est la base de la multiplication binaire.
    Euh oui, pardon. Je supprime mon post. C'est trop bas niveau pour moi...

  8. #8
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: Cast et little/big endian
    Citation Envoyé par progman
    J'ai un code qui fait une multiplication de deux nombres 32 bits, qui sort un résultat sur 64, et que je caste dans un 32 bits. Ma question, hyper simple, si ma machine est little endian, je récupère les 32 bits de poids faibles, et si c'est du big endian ?
    C'est indépendant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    long long a = 123;
    long b = (long) a;
    b vaut toujours 123.
    C'est pareil que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int a = 123;
    char b = (char) a;
    Un cast, c'est un masque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    /* CHAR_BIT == 8 */
    char b = a && 0xFF;
    c'est toujours le poids faible qui est pris. Le fait que le poids faible soit à droite ne dépend pas de l'endianness, car on ne travaille pas au niveau byte, mais avec le type entier.

  9. #9
    Membre éclairé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Points : 763
    Points
    763
    Par défaut
    D'accord, merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Bibliothèque de conversion Little / Big endian ?
    Par BakaOnigiri dans le forum Bibliothèques
    Réponses: 2
    Dernier message: 21/12/2009, 15h17
  2. Réponses: 3
    Dernier message: 07/05/2008, 00h42
  3. Little endian - Big endian
    Par julinho99 dans le forum Ada
    Réponses: 4
    Dernier message: 10/04/2008, 12h13
  4. Conversion little vers big endian
    Par kris1980 dans le forum x86 32-bits / 64-bits
    Réponses: 8
    Dernier message: 16/08/2007, 14h42
  5. Big endian et Little endian?
    Par moon93 dans le forum C
    Réponses: 4
    Dernier message: 07/05/2006, 23h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo