Bonjour à tous ^^
Est ce qu'il y a quelqu'un qui pourra m'expliquer ces lignes de code?
Merci d'avance
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 value |= ((X- Y - 1) & 0x80000000) >> (31-shift);![]()
Bonjour à tous ^^
Est ce qu'il y a quelqu'un qui pourra m'expliquer ces lignes de code?
Merci d'avance
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 value |= ((X- Y - 1) & 0x80000000) >> (31-shift);![]()
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é.
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
Bonjour Cher Pfeuh ^^
Yep vous avez raison, je viens de régler ça!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é.
Sinon Merci bien pour la réponse![]()
On va supposer que X et Y sont des entiers signés sur 32 bits.
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) & 0x80000000
ou encore a
Code : Sélectionner tout - Visualiser dans une fenêtre à part (X - Y - 1) < 0 ? 0x80000000 : 0
qui doit avoir plus de sens pour toi.
Code : Sélectionner tout - Visualiser dans une fenêtre à part X <= Y ? 0x80000000 : 0
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 ((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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part value |= ( (X- Y - 1) & 0x80000000) >> (31-shift);
Merci bien cher Jean-Marc.Bourguet
c'est encore plus clair![]()
Partager