Ou exclusif (Xor) de deux nombre de 32bits

Résolu
Tortue69 -  
nicocorico Messages postés 799 Date d'inscription   Statut Membre Dernière intervention   -
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.
A voir également:

2 réponses

nicocorico Messages postés 799 Date d'inscription   Statut Membre Dernière intervention   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
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
nicocorico Messages postés 799 Date d'inscription   Statut Membre Dernière intervention   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
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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
Tortue69
 
Parfait merci de ta réponse et de tes explications :)
0