la valeur “ret” contient un 3 ! C’est comme si le compilateur simplifiait le macro en faisant la différence entre les deux décalages dans le sens opposés afin d’en faire qu’un. Mais ça fausse totalement le résultat !!
Voyez-vous l’erreur que j’ai commise?
Merci d’avance
Note : J’ai testé avec une fonction qui exécute un décalage dans un sens puis dans l’autre sens (sur des lignes différentes) et ça marche!
Déjà, utilise CHAR_BIT et pas 7. Sauf si tu veux vraiment que tes char tiennent que sur 8 bits. CHAR_BIT se trouve dans limits.h normalemnt et vaut 8 (= nombre de bit dans un char)
Parce qu’en fait, si ton char est vu avec un bit de signe, le décallage à droite ne va pas trop aider. Ceci dit entry est unsigned char. (au passage: c’est SEP_BYTE, pas SEPS_BYTE)
Pour le reste, je ne vois pas.
Essaye un gcc/g++ avec l’option -E pour voir comment est transformé ta macro.
(au passage, si tu veux retourner 0 ou 1, je pense que c’est avec un masque qu’il faudrait le faire)
2. Je sais que je suis obstiné mais je ne comprends toujours pas l’erreur que j’ai commise, j’aimerais bien comprendre pour pas la reproduire plus tard :sweet: .
Ton erreur vient du fait que tu ne fait que des décalage, tu n’isoles aucun bit, la tu travaille sur le mot, c’est plus comme si tu voulais modifier le bit que si tu voulais l’isoler.
Je te conseille de googler sur les masques de bits histoire que tu comprennes l’arithmetique binaire.