Bonjour à tous ^^
Est ce qu'il y a quelqu'un qui pourra m'expliquer ces lignes de code?
Merci d'avance :oops:Code:
1
2 value |= ((X- Y - 1) & 0x80000000) >> (31-shift);
Version imprimable
Bonjour à tous ^^
Est ce qu'il y a quelqu'un qui pourra m'expliquer ces lignes de code?
Merci d'avance :oops:Code:
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! :oops::oops::oops:Citation:
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:ccool:
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 aCode:(X - Y - 1) & 0x80000000
ou encore aCode:(X - Y - 1) < 0 ? 0x80000000 : 0
qui doit avoir plus de sens pour toi.Code: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:((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:value |= ( (X- Y - 1) & 0x80000000) >> (31-shift);
Merci bien cher Jean-Marc.Bourguet :rose::rose::rose::rose:
c'est encore plus clair :ccool: