Ou exclusif (Xor) de deux nombre de 32bits
Résolu
Tortue69
-
nicocorico Messages postés 799 Date d'inscription Statut Membre Dernière intervention -
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:
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.
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:
- Ou exclusif (Xor) de deux nombre de 32bits
- Nombre de jours entre deux dates excel - Guide
- Deux ecran pc - Guide
- Comment faire deux colonnes sur word - Guide
- 32bits - Guide
- Nombre facile - Télécharger - Outils professionnels
2 réponses
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;
Donc tu dois pouvoir faire directement
if (Test==1) Mavar=Mavar^CmptTour;
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,
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,
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 :
à moins que j'aie encore mal compris ! Tant pis, si t'as trouvé ton bonheur c'est le principal...