2017-08-12 1 views
1

Nous pouvons facilement trouver:Est-il possible de résoudre des équations d'opérateurs bit-wise?

a=7 
b=8 
c=a|b 

Alors c sort être: 15

Maintenant, pouvons-nous trouver a si c est donnée?

Par exemple:

b=8 
c=15 
c=a|b 

Trouver une? Et aussi si x=2<<1 est donné, alors nous pouvons obtenir x=4. Mais si 4=y<<1 est donné Peut-on obtenir y?

+0

Il n'y a pas de solution unique pour '15 = a | 8'. 'a' pourrait être 7 ou 15. Et il n'y a pas de y tel que' 3 = y << 1'. –

+0

Edited it Il s'agissait d'une faute de frappe. –

+0

Dans le cas du décalage de gauche, vous intéressez-vous aux entiers de taille fixe (comme c'est généralement le cas dans d'autres langages, mais aussi numpy) ou aux entiers de taille arbitraire? – harold

Répondre

1

Une solution (si elle existe) d'une telle équation peut être considérée comme "unique" à condition que vous permettez à trois états pour chaque bit:

  • bit est 0
  • bit
  • est 1
  • ne le fait pas X

Par exemple 7 | 00001XXX(binary) = 15

Bien sûr, ce résultat ne peut pas être converti en décimal.

Pour certaines opérations, il peut être nécessaire de spécifier la largeur de bit.

0

vous pouvez trouver un a qui résout l'équation, mais il ne sera pas unique. Supposons b=c=1 puis a=0 et a=1 sont des solutions. pour c=1, b=0 il n'y aura pas de solution. ceci est valable pour tous les bits des nombres que vous considérez. si l'équation est résoluble, a=c sera (l'une des) solution (s).

et le décalage vers la gauche d'un entier produira toujours un entier pair (le bit le moins significatif est zéro). donc cela ne fonctionne que pour les itegers. dans ce cas, vous pouvez inverser l'opération en appliquant un décalage vers la droite (>>).

0

Pour vos cas particuliers, la réponse est pas, vous ne pouvez pas résoudre ou « annuler » l'opération OU (|) et le déplacement à gauche ou à droite (<<, >>) puisque l'information dans les deux cas est perdu en appliquant la opération. Par exemple, 8|7=15 et 12|7=15, étant donné les 7 et 15, il n'est pas possible d'obtenir une solution unique.

Une exception est l'opération XOR, pour laquelle il est tenu a^b=c, puis b^c=a et a^c=b.