Opérateur bit à bit

cs_dunith Messages postés 100 Date d'inscription samedi 5 janvier 2008 Statut Membre Dernière intervention 11 avril 2008 - 14 févr. 2008 à 15:14
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 - 18 févr. 2008 à 11:46
bonjour


j'ai dans l'ancien code en c:
if ((numcmd!=22)&(strncmp(trm_recp,"N",1)==0) )

            {

                PLCWrite[ WW_INDX[DevGENERFPP.numCom] ] |= (1<<4); // ecriture 1

             }

            else

            {

                PLCWrite[ WW_INDX[DevGENERFPP.numCom] ] &=~(1<<4); // ecriture2

            }


pour l'ecriture 1: c'est de forcer le bit 4 à 1
pour l'ecriture 2: c'est de forcer le bit 4 à 0

Quelq'un peut si c'est juste ce que j'ai ecrit ou non, à propos des deux écritures?


merci

8 réponses

sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
15 févr. 2008 à 01:01
rediriger chez les Ciste mais c a peu pres ca

(daedric@rancisis ~)./a.out
16
-17
(daedric@rancisis ~)

(daedric@rancisis ~)cat t.c
int main()
{
  printf("%i\n", 1<<4);
  printf("%i\n", ~(1<<4));
  return (0);
}
(daedric@rancisis ~)

n'oublie pas que ~ inverse TOUS les bit donc tu passe en negatif le bit de signe etant le 31eme

"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
0
cs_dunith Messages postés 100 Date d'inscription samedi 5 janvier 2008 Statut Membre Dernière intervention 11 avril 2008
15 févr. 2008 à 08:39
bonjour


merci pour ta réponse [auteur/SHEOROGATH/234347.aspx sheorogath]

mais je suis désolée je n'ai pas tout à fait compris?

merci
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
15 févr. 2008 à 12:37
Ca dépend comment tu comptes les bits. Si tu comptes à partir de 1, ton code est faux, si tu comptes à partir de 0, il est juste.

Enfin j'imagine que ceci est plus correct: (1<<3)
0
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
15 févr. 2008 à 12:44
je suis partie du principe qu'on comptais a partir de 0 ^^

je pousserais une explication plus tard, ou demain ... la vais faire dodo (cf heure de postage ^^ pas dormis depuis)

"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
15 févr. 2008 à 22:10
"n'oublie pas que ~ inverse TOUS les bit donc tu passe en negatif le bit de signe etant le 31eme"

Le bit signé n'est pas le 32 ème ? (bit 31 si on compte à partir de 0)

Oui c'est vrai que si on applique cette opération directement sur un entier, on le changera de signe.
Cependant, dans son exemple, il utilise &=.
Donc, ici, rien ne changera de signe et le bit qu'il voudra mettre à 0 sera bien à 0 et seulement lui changera de valeur.

C++ (@++)<!--
0
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
16 févr. 2008 à 00:13
j'ai bien dit le 31eme je compte toujours a partir de 0 ^^

sinon apres il a raison quant a ses operations j'ai juste un peu plus pousse ^^

"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
16 févr. 2008 à 02:14
J'ignorais que l'on pouvais dire 0ème (zérotième) ;)

C++ (@++)<!--
0
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
18 févr. 2008 à 11:46
c'est comme commencer l'indexage des tableaux a 0 ^^

"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
0
Rejoignez-nous