IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

opérateur ^ ( OU exclusif ) [Débutant]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 202
    Par défaut opérateur ^ ( OU exclusif )
    Bonjour,
    Dans un morceau de code, on souhaite regarder si deux objets sont egaux.
    Si deux objets sont considérés comme égaux, la méthode GetHashCode de chaque objet doit retourner la même valeur.
    On a donc:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            public override int GetHashCode()
            {
                return this.Entreprise.GetHashCode()
            ^ this.CodePostal.GetHashCode();
     
            }
    Je ne comprends pas pourquoi on utilise un OU exclusif sachant que la table correspondante est:

    Table de vérité de XOR
    A B R = A ⊕ B
    0 0 0
    0 1 1
    1 0 1
    1 1 0

    Merci de votre aide!

  2. #2
    Membre émérite

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Par défaut
    Je ne vais pas mettre de lien vers un autre forum, mais en cherchant XOR + hashcode sur Google on tombe vite sur des explications (Mon premier lien parlait de Java, mais bon Java ou C# le problème du Hash revient au même)
    Mon blog sur les technos .NET et Agile -> http://blog.developpez.com/maximepalmisano/

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 202
    Par défaut
    En effet j'ai trouvé ceci :

    Of all bit-operations XOR has the best bit shuffling properties.

    This truth-table explains why:

    A B AND
    0 0 0
    0 1 0
    1 0 0
    1 1 1

    A B OR
    0 0 0
    0 1 1
    1 0 1
    1 1 1

    A B XOR
    0 0 0
    0 1 1
    1 0 1
    1 1 0

    As you can see for AND and OR do a poor job at mixing bits.

    OR will on average produce 3/4 one-bits. AND on the other hand will produce on average 3/4 null-bits. Only XOR has an even one-bit vs. null-bit distribution. That makes it so valuable for hash-code generation.

    Remember that for a hash-code you want to use as much information of the key as possible and get a good distribution of hash-values. If you use AND or OR you'll get numbers that are biased towards either numbers with lots of zeros or numbers with lots of ones.

  4. #4
    Membre émérite

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Par défaut
    Ce qu'il explique, c'est que XOR est le seul opérateur binaire à posséder une table de vérité avec autant de 0 que de 1. Vu que pour un Hashcode il faut le plus d'informations possibles afin d'avoir une dispersion uniforme, avec un AND on se retrouverait avec beaucoup de 0 et avec un OR avec beaucoup de 1.

    J'espère que c'est un peu plus clair comme ça
    Mon blog sur les technos .NET et Agile -> http://blog.developpez.com/maximepalmisano/

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 202
    Par défaut
    Yes ça m'a aidé!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. or exclusif opérateur
    Par champion dans le forum Langage SQL
    Réponses: 2
    Dernier message: 22/01/2007, 10h00
  2. [.NET VC++] ou exclusif entre deux String
    Par benoitB dans le forum MFC
    Réponses: 7
    Dernier message: 25/11/2003, 11h20
  3. Opérateur like
    Par Troopers dans le forum ASP
    Réponses: 3
    Dernier message: 15/09/2003, 19h19
  4. opérateur non applicable à ce type d'opérande
    Par Amon dans le forum Langage
    Réponses: 3
    Dernier message: 11/06/2003, 18h07
  5. [imprecis]Réaliser a^n avec seulement l'opérateur d'addition
    Par Amon dans le forum Algorithmes et structures de données
    Réponses: 18
    Dernier message: 08/11/2002, 22h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo