Fonctionnement de xor

Soyez le premier à donner votre avis sur cette source.

Snippet vu 12 871 fois - Téléchargée 33 fois

Contenu du snippet

Bon ben voila sa fait longtemps que j'ai pas poster de source ici , et puis je veux des points :P , Nan c des jokes.
Quelqu'un sur le chat m'avait expliqué comment fonctionne l'opérant Xor

En fait c'est très simple et j'ai fait une source qui reproduit Xor.
Pour commencer , mon code "traduit" les 2 chiffre en binaires
Par exemple:
10 = 00001010
25 = 00011001
10 Xor 25 = 19

Le principe de xor:
xor prend chaque chiffre du code binaire de chaque nombre et retourne 1 si il sont different ou bien 0 si il sont pareil

0 0 0 0 1 0 1 0
0 0 0 1 1 0 0 1
-------------------
0 0 0 1 0 0 1 1

Dans cette exemple seul les colonne 4,7 et 8 sont constitué de chiffre different , donc seulement ces colonnes vont etre agale a 1

Dans mon code il y a les fonctions pour transferer un code binaire en chiffre et un chiffre en binaire
Il y a aussi la fonction vbXor(chiffre1,chiffre2)

Ce code ne sert pas vraiment a grand chose seulement a montrer comment fonctionne xor.

Svp ne mettez pas 1 a cause que c'est inutile :-O c'est instructif , donc c'est pas inutile!

Source / Exemple :


Public Function vbXor(chiffre1 As Integer, chiffre2 As Integer) As Integer
char1 = Dec2Bin(chiffre1)
char2 = Dec2Bin(chiffre2)
For i = 1 To 8
    If Val(Mid(char1, i, 1)) <> Val(Mid(char2, i, 1)) Then char3 = char3 & "1" Else char3 = char3 & "0"
Next
vbXor = Bin2Dec(char3)
End Function

Public Function Dec2Bin(Chaine As Integer) As String
    Dim i As Integer
    For i = 1 To 8
        If Chaine >= (2 ^ (8 - i)) Then Dec2Bin = Dec2Bin & "1": Chaine = Chaine - (2 ^ (8 - i)) Else Dec2Bin = Dec2Bin & "0"
    Next
End Function

Public Function Bin2Dec(ByVal Chaine As String) As Integer
Dim i As Integer
    For i = 1 To 8
        If Mid(Chaine, i, 1) = "1" Then Bin2Dec = Bin2Dec + (2 ^ (8 - i))
    Next
End Function

A voir également

Ajouter un commentaire Commentaires
Messages postés
3
Date d'inscription
mardi 8 novembre 2005
Statut
Membre
Dernière intervention
20 juin 2008

il y'en a une methode plus simple pour qlquler l'XOR de deux binnaire :
soit a et b de nbr binnaire,

A XOR B = ( A OU B ) et NOT (A ET B)

en vb en peux faire comme ca (pour titre educatif):
XORysn = (a And b) And (Not (a And b))

mais en pratique il y'en deja un XOR deja defini en VB
Messages postés
2
Date d'inscription
lundi 29 septembre 2003
Statut
Membre
Dernière intervention
18 février 2008

il est aussi possible de faire le "ou exclusif" sous excel de cette façon:

appliquer la formule =SI(OU(ET(A1=1;A2=1);ET(A1=0;A2=0));0;1)
Messages postés
921
Date d'inscription
vendredi 20 décembre 2002
Statut
Membre
Dernière intervention
23 septembre 2010

A xor B = (A and not B) or (not A and B)
Ce qui résume tout à fait clairement puisque xor ("OU exclusif") renvoie 1 si les bits sont différents, 0 sinon
:)
Messages postés
550
Date d'inscription
vendredi 5 janvier 2001
Statut
Membre
Dernière intervention
23 septembre 2006

pas confondre xor et mod !
mod c'est comme le dit saros, le reste dans la division euclidienne de a par b
par exemple a mod b = a-int(a/b) 'on considere tout positif pour eviter problemes

le mod est un opérateur arithmetique

le xor est un operateur logique !
a mod b => a et b sont d nombres

a xor b (ou and ou or ou not) a et b sont des expression vrai ou fausse
dans le cas ou ce sont des nombres, alors ils sont "décomposé" en nombre binaire, et le xor s'applique sur chaque bit du nombre.

un exemple d'application :
dans les API, vous pouvez etre amene a par exemple recuperer les flags d'une fenetre.
puis à redefinir les flasg a partir de ceux obtenus (en le modifiant)
Ces popriété sont stocké dans une variable long. En effet, une propriété (par exemple fenetre redimensionable) représente 1 bit dans la variable
donc si vous voulez forcer le non redimensionnement, il vous faudra changer le bit en question pour qu'il ait la valeur 0

ex : le flag recu de la fenetre est 70 (pour faier simple) soit en binaire :
0100 0110
en admettant que ce soit le bit 7 qui définisse la fenetre comme redimensionable, il vous faut modifier ce nombre pour obtenir :
0000 0110

comment faire ?
grace au and. explication. le 7 em bit tout seul, donne le nombre 64
et d'apres le tableau de verite du and on a

ab s
00 0
01 0
10 0
11 1


si on fait un AND simple ca donne :
0100 0110
0100 0000

0100 0000
or c'est pas ce qu'on voulait. en revanche en appliquant un Not (inverseur) avant, ca donne :

0100 0110
1011 1111

0000 0110

et la notre 1 est parti.


De meme pour forcer le passage a 1 d'un bit, si par exemple on a :
0000 0110
et qu'on veut forcer le passage a 1 du 7e bit, on utilise une or :

0000 0110
0100 0000

0100 0110


voila j'espere que je me suis pas trompé dans tout ce que j'ai dit :)
++
Messages postés
586
Date d'inscription
jeudi 18 septembre 2003
Statut
Membre
Dernière intervention
13 février 2008
2
Bien fait Yoman
Afficher les 14 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.