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 :

Lignes de code incomprises


Sujet :

C

  1. #1
    Membre confirmé Avatar de miss_angel
    Inscrit en
    Février 2008
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 210
    Par défaut Lignes de code incomprises
    Bonjour à tous ^^
    Est ce qu'il y a quelqu'un qui pourra m'expliquer ces lignes de code?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    value |= ((X- Y - 1) & 0x80000000) >> (31-shift);
    Merci d'avance

  2. #2
    Membre Expert
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Par défaut
    Salut,

    Je crois que l'admin n'a pas vu que tes messages étaient différents malgré le même titre, je réponds donc a celui qui a été effacé.

    Citation Envoyé par miss_angel Voir le message
    Bonjour à tous ^^
    Est ce qu'il y a quelqu'un qui pourra m'expliquer cette ligne de code?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    value |= ( (X- Y - 1) & 0x80000000) >> (31-shift);
    Merci d'avance
    On fait un OU logique ('|' en C) entre value et la partie à droite du signe "égal" puis on met le résultat dans value. Ca c'est pour l'expression '|='.

    Pour (X- Y - 1) & 0x80000000), on isole le 32ème bits de (X- Y - 1) et on le décale vers la droite (on le divise par 2 si tu préfères) un certain nombre de fois. Ce nombre est (31-shift)

    A+

    Pfeuh

  3. #3
    Membre confirmé Avatar de miss_angel
    Inscrit en
    Février 2008
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 210
    Par défaut
    Bonjour Cher Pfeuh ^^

    Je crois que l'admin n'a pas vu que tes messages étaient différents malgré le même titre, je réponds donc a celui qui a été effacé.
    Yep vous avez raison, je viens de régler ça!

    Sinon Merci bien pour la réponse

  4. #4
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    On va supposer que X et Y sont des entiers signés sur 32 bits.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (X - Y - 1) & 0x80000000
    isole le bit de poids fort, qui est le bit de signe pour les entiers signés, donc ca equivaut a

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (X - Y - 1) < 0 ? 0x80000000 : 0
    ou encore a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    X <= Y ? 0x80000000 : 0
    qui doit avoir plus de sens pour toi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((X- Y - 1) & 0x80000000) >> (31-shift)
    va donc etre le resultat declale de 31-shift bits. Dans la plupart des implementations, le decalage des valeurs signees conserve le signe. Donc suivant que X<=Y ou non, on va avoir tout les bits sauf les shift bits de poids faible a 0, ou simplement 0.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    value |= ( (X- Y - 1) & 0x80000000) >> (31-shift);
    Force donc les 32-shift bits de poids fort de value a 1 si X <= Y. Sans savoir a quoi correspondent X, Y et shift, c'est difficile d'en donner une interprétation moins informatique.

  5. #5
    Membre confirmé Avatar de miss_angel
    Inscrit en
    Février 2008
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 210
    Par défaut
    Merci bien cher Jean-Marc.Bourguet
    c'est encore plus clair

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

Discussions similaires

  1. ~var; ligne de code incomprise
    Par sanatou dans le forum C++
    Réponses: 5
    Dernier message: 20/11/2006, 15h00
  2. Réponses: 11
    Dernier message: 16/11/2006, 22h10
  3. Réponses: 3
    Dernier message: 08/11/2006, 09h54
  4. lignes de code incomprises
    Par sanatou dans le forum C++
    Réponses: 2
    Dernier message: 25/10/2006, 21h28
  5. Calculeur de ligne de code
    Par Bernybon dans le forum Autres éditeurs
    Réponses: 9
    Dernier message: 05/03/2004, 16h29

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