L'aspect intuitif clé qui distingue XOR des autres opérateurs logiques est qu'il est sans perte o sans perte ce qui signifie que, contrairement à ET et OU (et plus similaire à NO à cet égard), il est déterministcalement réversible : Vous pouvez exactement récupérer une des valeurs d'entrée étant donné le reste de l'historique du calcul.
Les schémas suivants illustrent que ET y OU ont chacune au moins un cas où l'état de l'une des entrées est irrécupérable, étant donné une certaine valeur de l'autre entrée. Je les désigne comme des entrées "perdues".
Pour le XOR il n'existe aucune condition dans laquelle une valeur d'entrée ou de sortie ne peut être récupérée, compte tenu du reste de l'historique du calcul. En fait, il y a une symétrie qui sait que deux valeurs quelconques du triple (in0, in1, out)
vous permet de récupérer le troisième. En d'autres termes, quelle que soit l'entrée ou la sortie, chacune de ces trois valeurs est la XOR des deux autres !
Cette image suggère qu'une autre façon de penser à la XOR est en tant que contrôlable NON porte. En basculant l'une des entrées (l'entrée supérieure dans l'exemple ci-dessus), vous pouvez contrôler si l'autre entrée (inférieure) est niée ou non.
Un autre point de vue équivalent est que XOR met en œuvre le positive-logique non égal à (!=) par rapport à ses deux entrées. Et donc aussi la est égal à fonction (=) sous logique négative .
Conformément à ses propriétés de symétrie et de préservation de l'information, XOR devrait venir à l'esprit pour les problèmes qui nécessitent une réversibilité ou une récupération parfaite des données. L'exemple le plus évident est celui XOR L'utilisation d'un ensemble de données avec une "clé" constante obscurcit trivialement les données de sorte que la connaissance de la clé (qui peut être gardée "secrète") permet une récupération exacte.
La préservation de l'ensemble des informations disponibles est également souhaitable dans les cas suivants hachage . Comme vous voulez des valeurs de hachage qui discriminent au maximum les éléments sources, vous devez vous assurer que le plus grand nombre possible de leurs caractéristiques distinctives sont incorporées, en minimisant les pertes, dans le code de hachage. Par exemple, pour hacher une valeur de 64 bits en 32 bits, vous utiliserez le langage de programmation suivant XOR opérateur ^
car c'est un moyen simple de garantir que chacun des 64 bits d'entrée a la possibilité d'influencer la sortie :
uint GetHashCode(ulong ul)
{
return (uint)ul ^ (uint)(ul >> 32);
}
Notez que dans cet exemple, l'information est perdue même si XOR a été utilisé. (En fait, la "perte d'information stratégique" est en quelque sorte le but du hachage). La valeur originale de ul
n'est pas récupérable à partir du code de hachage, car avec cette seule valeur, vous n'avez pas deux des trois valeurs de 32 bits qui ont été utilisées dans le calcul interne. Rappelez-vous que vous devez conserver deux des trois valeurs pour une inversion parfaite. A partir du code de hachage résultant et des deux valeurs qui étaient XOR ed, vous avez peut-être sauvegardé le résultat, mais vous ne sauvegardez généralement pas l'un ou l'autre pour l'utiliser comme valeur clé pour obtenir l'autre. 1
En guise d'aparté amusant, XOR a été d'une aide précieuse à l'époque de des astuces pour le travail en équipe . Ma contribution à l'époque était un moyen de Activation ou désactivation conditionnelle des bits sans branchement en C/C++ :
unsigned int v; // the value to modify
unsigned int m; // mask: the bits to set or clear
int f; // condition: 0 to 'set', or 1 to 'clear'
v ^= (-f ^ v) & m; // if (f) v |= m; else v &= ~m;
Sur une note plus sérieuse, le fait que XOR est non-lossy a important théorie de l'information implications pour l'informatique futuriste, en raison d'une relation importante entre le traitement de l'information et la Deuxième loi de la thermodynamique . Comme expliqué dans un livre excellent et accessible de Charles Seife, Décoder l'univers il s'avère que la perte d'information pendant le calcul a un impact sur la productivité. exact relation mathématique avec le rayonnement du corps noir émanant d'un système de traitement. En effet, la notion de entropie joue un rôle central dans la quantification de la manière dont la "perte" d'information est (ré)exprimée en chaleur (il s'agit également de la même relation proéminente de la célèbre étude de Steven Hawking pari du trou noir ).
De tels propos concernant XOR n'est pas nécessairement exagéré ; Seife note que le développement des CPU modernes se heurte actuellement à des limites de tolérance fondamentales sur le plan de l'architecture de l'ordinateur. watts/cm² des matériaux semi-conducteurs, et qu'une solution serait de concevoir des systèmes informatiques réversibles, ou sans perte. Dans cette future génération spéculative de CPU, XOR La capacité de l'entreprise à préserver l'information. et ainsi évacuer la chaleur -serait inestimable pour augmenter la densité de calcul (c'est-à-dire, MIPS /par cm²) malgré les limitations de ces matériaux.
1. Dans cet exemple simple, les 3 valeurs pertinentes seraient le code de hachage et les parties supérieure et inférieure de l'original. ulong
valeur. Bien sûr, les "données" hachées originales, représentées par ul
ici, probablement est retenu.
23 votes
Comprends-tu ce qui se passe quand tu additionnes un nombre à lui-même ?
13 votes
Si vous savez ce que fait xor et que vous n'arrivez toujours pas à raisonner sur le code, la meilleure chose à faire est de prendre du papier et de l'exécuter à sec, en notant les bits.
10 votes
Il n'est pas toujours possible d'identifier l'algorithme à utiliser en recherchant des mots-clés dans les quiz. Une meilleure approche consiste à se familiariser avec plusieurs d'entre eux afin de pouvoir penser à l'un d'entre eux si vous rencontrez un problème familier.
1 votes
Il faut être très intelligent pour le découvrir par soi-même, mais si vous vous intéressez aux énigmes informatiques, vous en avez peut-être entendu parler.
7 votes
Il n'y a pas de "mots-clés" à rechercher. Vous ne pouvez pas le découvrir par vous-même si vous n'avez pas déjà une compréhension suffisamment solide des opérations logiques (par bit) pour penser "xor pourrait le faire" et ensuite essayer.
9 votes
Pour la plupart des gens, vous reconnaissez utiliser XOR pour cela parce que vous avez vu XOR utilisé pour des astuces similaires dans le passé.
1 votes
Comme vous associez un résultat (cumulatif) à chaque élément de la liste, chaque paire de doublons finit par s'annuler. Il ne reste plus que l'homme impair. C'est à peu près l'équivalent de dire n+0==n ... ou a-a+b-b+c-c .... +n == n --- même si vous mélangez tous les autres éléments de la somme. Cela ne fonctionne que parce qu'il n'y a qu'un seul élément non apparié. Il est à noter que l'élément impair de cette liste n'a pas besoin d'avoir une valeur distincte --- un triplicata parmi de nombreux doublons aura toujours pour résultat que l'un des triplicata sera votre valeur finale.
1 votes
Il est également à noter que vous ne pouvez pas utiliser cette astuce XOR pour confirmer qu'une liste possède la propriété souhaitée --- qu'il s'agit de N paires de chiffres + 1 chiffre supplémentaire. L'astuce ne fonctionne donc que si vous avez la garantie que votre entrée possède les propriétés indiquées, ce qui en fait une énigme plutôt qu'une technique pratique.
2 votes
Il existe un technicité qui empêche cette solution d'être entièrement portable . Sur certaines architectures non conventionnelles, il peut y avoir un intermédiaire.
result
qui est une valeur illégale.0 votes
Ce type de question est difficile à comprendre si vous ne connaissez pas déjà la réponse, car il s'agit d'une sorte de question piège. Elle n'est pas là pour évaluer vos compétences en tant que programmeur, mais plutôt pour déterminer si vous connaissez déjà l'algèbre booléenne et si vous avez été attentif dans votre cours de logique numérique. Si vous n'avez jamais pris de cours de logique numérique, votre sort dépend de votre connaissance ou non de questions comme celle-ci en ligne.
1 votes
@Baldrickk : Non.
[2,3,4,5]
par exemple, donne 0 mais n'est pas constitué de paires.0 votes
@tehtmi bah, oui, vous avez raison. J'aurais dû y réfléchir davantage