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 de deux entiers


Sujet :

C

  1. #1
    Membre du Club
    Inscrit en
    Avril 2009
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 140
    Points : 56
    Points
    56
    Par défaut Cast de deux entiers
    Bonjour,

    Désolé de vous importuné avec une question si bête mais j'aimerais savoir, lorsque je CAST un entier de 8bit dans un entier de 16bits, où se place mes 8bits dans ceux du 16bits, poids fort ou poids faible?

    Exemple :
    uint8 toto;
    temp = (uint16)(toto&0x07);

    Merci d'avance,

    Cordialement,

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 370
    Points : 23 625
    Points
    23 625
    Par défaut
    Bonjour,

    Citation Envoyé par Kartoon67 Voir le message
    Désolé de vous importuné avec une question si bête mais j'aimerais savoir, lorsque je CAST un entier de 8bit dans un entier de 16bits, où se place mes 8bits dans ceux du 16bits, poids fort ou poids faible?
    Lorsque tu fais un cast, tu convertis une valeur d'un type vers un autre. La valeur en elle-même doit donc, en principe, rester inchangée ou équivalente. Il n'y a perte d'informations que lorsque tu transtypes (ou castes) d'un type donné vers un type plus restreint.

    C'est donc ce principe qui va déterminer où doivent se retrouver ces bits. :-)

    Maintenant, il est probable que tu aies fait le test et te sois retrouvé dans la situation contraire à ce que tu attendais. Dans ce cas, fais une recherche avec « Big Endian » et « Little Endian ». ;-)

  3. #3
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Dans le cas d'un cast d'une valeur entiere 8 bits vers une valeur entière 16 bits, il y a deux cas :

    1- Lorsque c'est possible, la valeur est conservée.
    c'est le cas de signed -> signed, de unsigned -> unsigned , de unsigned -> signed et de signed ->unsigned si, dans ce dernier cas, le nombre signé est >= 0 .

    2- Sinon (signed ->unsigned et le nombre signé est négatif) la valeur transtypée est obtenue en ajoutant la valeur maximum +1 du type de destination (65536).

    La conséquence, si le codage des entiers signés est en complément à 2, est que les 8 lsb sont les mêmes et les 8 msb résultent de l'extension du signe si la valeur à convertir est signée ou 0 si elle est unsigned
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  4. #4
    Membre du Club
    Inscrit en
    Avril 2009
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 140
    Points : 56
    Points
    56
    Par défaut
    Merci pour votre réponse.

    Je suppose que d'après les recherches que j'ai faite. Je dispose d'un processeur little-endian.

    Cela voudrais dire alors que lors du cast, mes 8bits serait stocker sur les 8bits de poids faible de mon entier de 16bit?

    Cdt,

  5. #5
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Oui.


    Je pense que le fait d'être en little ou en big endian ne change pas ce principe. C'est la position des bits de poids forts par rapport à ceux de poids faibles, en mémoire, qui change. Ce comportement ne serait-il pas logique ? Dans le cas contraire, on ne pourrait pas faire de cast vers un type plus "large".

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 370
    Points : 23 625
    Points
    23 625
    Par défaut
    Un petit exemple pour illustrer tout cela, en faisant la comparaison avec le décimal. En admettant que tu aies des nombres de 5 chiffres et des nombres de 10 chiffres, et que tu veuilles stocker la valeur « 86472 », par exemple, alors tu obtiens :

    Code Texte : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Sur  5 chiffres :      86472
    Sur 10 chiffres : 0000086472

    Là, on voit très bien si les chiffres sont reportés à gauche (chiffres de poids fort) ou à droite (chiffres de poids faible).

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

Discussions similaires

  1. Masque de saisie pour un ou deux entiers
    Par piotrr dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 21/04/2008, 08h19
  2. comparaison de deux entiers
    Par paolo2002 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 15/01/2008, 08h50
  3. casting d'un entier
    Par open_source dans le forum Langage
    Réponses: 7
    Dernier message: 30/11/2007, 12h28
  4. test comparatif de deux entiers
    Par sisiso dans le forum C
    Réponses: 12
    Dernier message: 26/01/2007, 22h37
  5. addition de deux entiers dans le meme tedit
    Par vinse dans le forum Delphi
    Réponses: 6
    Dernier message: 10/01/2007, 17h32

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