9
votes

Exemple du complément de 2, pourquoi ne pas porter?

Je regarde de superbes conférences de David Malan ( ici ) Cela se passe en binaire. Il a parlé de la compensation signée / non signée, du compliment de 1 et de 2 représentations de complément. Il y avait une addition faite de 4 + (-3) qui alignée comme ceci:

0100
1101 (flip 0011 to 1100, then add "1" to the end)
----
0001


2 commentaires

Remarque, ce n'est pas "Flip puis ajoutez 1 à la fin". Il est "retournez les bits et ajoutez 1". C'est une distinction importante. La façon dont vous avez écrites signifie que vous venez de définir le «bout» à 1, mais c'est faux. Vous ajoutez 1, donc porte et telle appliquerait. SO -4 serait de 0100 retourné à 1011, puis ajoutez 1 pour obtenir 1100.


Bon à savoir, merci. Je vais même admettre que lorsque j'ai entendu parler de "le basculer", l'exemple était de 3 (0011) et il devient (1100) qui ressemble au maximum comme un flipper L-R qu'un "Chaque bit est commuté". Cela m'a fait pendant un moment ...


10 Réponses :


2
votes

À un moment donné, vous devez définir le nombre de bits pour représenter les chiffres. Il a choisi 4 bits. Tout porter dans le 5ème bit est perdu. Mais ça va parce qu'il décida de représenter le nombre en seulement 4 bits.

S'il a décidé d'utiliser 5 bits pour représenter les chiffres qu'il aurait obtenu le même résultat.


0 commentaires

11
votes

Le dernier transport a été abandonné car il ne correspond pas à l'espace cible. Ce serait le cinquième bit.

S'il avait effectué le même ajout, mais avec un stockage de 8 bits, il aurait ressemblé à ceci: p>

00000100
11111101
--------
00000001


0 commentaires

0
votes

Le transport a été abandonné parce qu'il n'y avait rien à faire avec elle. S'il est important du résultat, cela signifie que l'opération a débordé la plage de valeurs pouvant être stockée dans le résultat. Dans l'assembleur, il y a généralement une instruction capable de tester les transports au-delà de la fin du résultat, et vous pouvez expliciter y traiter là-bas - par exemple, le transportant dans la partie supérieure suivante d'une valeur de précision multiple.


0 commentaires

2
votes

C'est la beauté de cela ... Votre résultat sera la même taille que les termes que vous ajoutez. Donc, le cinquième bit est jeté sur

dans le complément de 2, vous utilisez le bit de transport pour signaler s'il y avait un débordement dans la dernière opération.

Vous devez regarder les bits Deux derniers Deux bits pour voir s'il y avait un débordement. Dans votre exemple, les deux derniers bits de transport étaient 11 signifiant qu'il n'y avait pas de débordement.

Si les deux derniers bits de transport sont 11 ou 00 alors aucun débordement n'a eu lieu. Si les deux derniers bits de transport sont 10 ou 01 , il y avait un débordement. C'est pourquoi il se souciait parfois du bit de transport et d'autres fois qu'il l'a ignorée.

La première ligne ci-dessous est la rangée de Carry. Les bits de gauche dans cette rangée sont utilisés pour déterminer s'il y avait un débordement. xxx


0 commentaires

3
votes

Si vous étendez le côté gauche en ajoutant plus de positions de chiffres, vous verrez que le transport se roule dans un nombre infini de positions de bits vers la gauche, de sorte que vous ne recevez jamais vraiment un maximum de 1. Ainsi. La réponse est positive.

 ...000100
+...111101
----------
....000001


0 commentaires

1
votes

On dirait que vous n'utilisez que 4 bits, il n'y a donc aucune colonne de 16 16.

Si vous utilisiez plus de 4 bits, la représentation -3 serait différente et le port de la mathématique serait toujours lancée. à la fin. Par exemple, avec 6 bits, vous auriez: xxx

et, étant donné que le port est en dehors de la plage de bits de votre représentation, il est parti et que vous n'avez que 000001 < / code>


0 commentaires

1
votes

considérer 25 + 15:

5 + 5 = 10, nous gardons le 0 et laissez le 1 aller à la colonne TENS. Alors il est 2 + 1 (+ 1) = 4. Par conséquent, le résultat est de 40 :)

C'est la même chose avec des binaires. 0 + 1 = 1, 0 + 0 = 0, 1 + 1 = 10 => Envoyer la 1 La colonne 8, 0 + 1 (+ 1) = 10 => Envoyer la 1 à la colonne suivante - Voici le débordement et pourquoi nous venons de jeter le 1 loin.

C'est pourquoi le complément de 2 est si génial. Il vous permet d'ajouter / de soustraire comme vous le faites avec la base-10, car vous (AB) utilisez le fait que le signe de signalisation est le MSB, qui en cascade des opérations en cascade tout le chemin de débordement, lorsque la NesséCary.

J'espère que je me suis fait comprendre. Assez difficile d'expliquer cela lorsque l'anglais n'est pas une langue maternelle :)


0 commentaires

0
votes

Parce que vous parlez de représentations de 4 bits. C'est une inussive comparée à une machine réelle, mais si nous devions prendre pour acquis qu'un ordinateur ait 4 bits dans chaque octet pendant un moment, nous avons les propriétés suivantes: un octet enveloppe de 15 à -15. Tout ce qui est à l'extérieur de cette plage ne peut pas être stocké. En outre, que feriez-vous avec un 5ème bit supplémentaire au-delà du forum de signalisation quand même?

Maintenant, étant donné que nous pouvons voir des mathématiques quotidiens que 4 + (-3) = 1 , ce que vous avez exactement.


0 commentaires

1
votes

Lors de l'addition de complément de 2 de 2, la seule fois qu'un problème indique qu'un problème est quand il y a une condition de débordement - qui ne peut pas se produire si les 2 opérandes ont un signe différent.

S'ils ont le même signe, la condition de débordement est lorsque le bit de signalisation passe des 2 opérandes, c'est-à-dire que, il y a un port dans le bit le plus significatif.

Si je me souviens de mon architecture de l'ordinateur Learnin 'Ceci est souvent détecté au niveau du matériel par un drapeau défini lorsque le bit le plus significatif est différent que le bit le plus significatif . Ce qui n'est pas le cas dans votre exemple (il y a une collecte au MSB ainsi que de la MSB).

Un moyen simple d'y penser est comme "le signe de ne pas changer". Si la collecte dans la MSB est différente de la réalisation, le panneau a incorrectement changé.


1 commentaires

"La seule fois où un comportement indique qu'un problème est quand il y a une condition de débordement". Je ne crois pas que cela soit correct (lors de la distinction entre débordement et emporter des drapeaux). Le port est utilisé pour les mathématiques non signés, le débordement est utilisé pour les mathématiques signées. Ils sont en fait différents bits sur une machine de compliment de 2 - pas le même bit réutilisé.



4
votes

Un port n'est pas identique à un débordement

Dans l'exemple que vous avez effectué une msb. Par définition, ce port se termine sur le sol. (S'il y avait un endroit où aller, il n'aurait pas été sorti de la MSB.)

mais ajoutant deux nombres avec différents signes ne peuvent pas trop déborder. Un débordement ne peut se produire que lorsque deux nombres avec le même signe produisent un résultat avec un signe différent.


2 commentaires

Prise intéressante. J'ai toujours pensé que le débordement se produit chaque fois que le résultat d'une opération nécessite plus de bits que ce qui est fourni, ce qui entraîne des bits plus élevés étant jetés. L'entrée Wikipedia semble être d'accord avec cela ( en.wikipedia.org/wiki/arithmetic_overflow ).


Certains portent sont les débordements, certains ne le sont pas. C'est compliqué.