Ou exclusif (Xor) de deux nombre de 32bits

Résolu
Tortue69 -  
nicocorico Messages postés 846 Statut Membre -
Bonsoir,

j'aimerais trouver un code en C qui permette de faire un ou exlusif (xor) si une certaine condition est respecté a un nombre de 32 bits et l'affiché.

j'ai reussi à faire le code pour faire un ou exclusif d'un petit nombre de 6 bits.
exemple:
int Mavar=42;
int CmptTour=32;
int i=0;
for(i=0;i<5;i++)
{
if (Test==1) {
  Mavar=Mavar^CmptTour;
  CmptTour=CmptTour/2;
}
printf("%d",Mavar);
}


Ce code fonctionne mais pour 6 bits seulement j'ai fait le même code mais pour 32 bits mais cela m'affiche des resultat coherent, ou alors je n'arrive pas à afficher correctement des long long.

Enfin bref, merci d'avance pour votre aide.

2 réponses

  1. nicocorico Messages postés 846 Statut Membre 138
     
    Je connais rien au C alors je t'aide comme je peux, mais dans tous les cas tu peux faire l'opération xor en 32 bits et sans boucle : c'est une instruction native du processeur...
    Donc tu dois pouvoir faire directement
    if (Test==1) Mavar=Mavar^CmptTour;
    0
    1. Tortue69
       
      Merci de ta réponse, je m'étais mal expliquer je voulais faire un Xor que sur certain bits, que si la condition etait respecté.
      0
    2. nicocorico Messages postés 846 Statut Membre 138
       
      Hé bien dans ce cas, tu peux toujours le faire sans boucle...
      Il te suffit de veiller à ce que les bits que tu veux laisser inchangés soient à zéro dans le masque, car les bits à 0 n'auront pas d'influence sur le résultat :
      0 xor 0 = 0  
      0 xor 1 = 1  
      

      à moins que j'aie encore mal compris ! Tant pis, si t'as trouvé ton bonheur c'est le principal...
      0
  2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Bonjour,

    Tes variables sont signées, autrement dit le 32ème bit sert au signe du nombre. D'où l'erreur.

    Utilise plutôt :
    unsigned long Mavar=42;
    unsigned long CmptTour=32;

    L'unsigned long sera plus portable que l'unsigned int (même s'il devrait également fonctionner sur ta machine).

    Et pour afficher, il faudra mettre : %lu (L minuscule)

    Cordialement,
    0
    1. Tortue69
       
      Parfait merci de ta réponse et de tes explications :)
      0