2010-08-10 8 views
10

Je lis actuellement un livre sur "bit tripoter" et la formule suivante apparaît:x-y = x + ¬y + 1 problème

x-y = x+¬y+1 

Mais cela ne semble pas fonctionner. Exemple:

x = 0100 
y = 0010 
x-y = 0010 
¬y = 1101 
¬y+1 = 1110 
x+1110 = 10010 

Mais 10010 != 0010...

Où ai-je fait une erreur (le cas échéant)?

(Le livre est "Hacker's Delight" par Henry S. Warren.)

+1

Notez que ce n'est pas tant « peu bricoler » comme il est [ « la définition de la soustraction »] (http://en.wikipedia.org/wiki/ Deux% 27s_complement) –

Répondre

23

Vous avez seulement un système à quatre bits! Ce 1 supplémentaire sur la gauche de votre résultat final ne peut pas exister. Il doit être:

x = 0100 
y = 0010 
~y = 1101 
~y + 1 = 1110 
x + 1110 = 0010 

L'autre bit déborde et ne fait pas partie de votre résultat. Vous pouvez lire sur two's complement arithmetic.

+0

Merci beaucoup :) Bonne explication. Merci à tous les autres. – 0x90

2

Vous transportez le bit supplémentaire. Dans les vrais ordinateurs si vous débordez le mot, le bit disparaît. (en fait, il est enregistré dans un drapeau de report.).

2

En supposant que les nombres sont limités à 4 bits, le cinquième 1 sera tronqué, vous laissant 0010.

1

Tout est question de débordement. Vous avez seulement quatre bits, il est donc pas 10010, mais 0010.

1

Juste pour ajouter aux réponses, dans un système de complément de 2:

~x + 1 = -x 

Say x = 2. En 4 bits, c'est 0010.

~x = 1101 
~x + 1 = 1110 

Et 1110 est -2