Partage
  • Partager sur Facebook
  • Partager sur Twitter

Opérations en Complément à 2

    13 décembre 2019 à 22:11:46

    e Bonjour

    Je commence un cours d'Architecture des ordinateurs mais je n'ai pas très bien compris la partie sur le complément à deux

    Si je fais la somme de deux nombres écrit en complément à deux comme pour le codage naif ( Donc en ajoutant chaque bits deux à deux et en gérant la retenue ) aurais-je un résultat correct ? Si j'additionne deux nombres de signes différents mais de même longueur par exemple 10011 et 01100 je vais me retrouver avec un nombre négatif alors que le second est en valeur absolue plus grand que le premier non ?

    Et pour la soustraction ? ( Même si je sais qu'on peut ajouter l'opposé, si je la fais comme en codage naif, est ce que ça fonctionnera ? J'ai essayé avec -35 et -5 et j'ai bien trouvé -30 mais je ne sais pas si c'est toujours le cas )

    Et la multiplication et la division ?

    Par ailleurs je n'ai pas très bien compris la différence entre Carry Flag et Overflow flag pourriez vous m'aider s'il vous plaït ?

    Finalement j'ai encore une dernière question, les nombres -7 et 9 s'écrivent de la même façon sur 4 Bits ( 1001 ) comment peut on alors différencier le premier du deuxième ? Merci

    Merci !

    -
    Edité par WindowsARencontreUnProblemeEtDoitRedemarrer 13 décembre 2019 à 22:33:39

    • Partager sur Facebook
    • Partager sur Twitter
      14 décembre 2019 à 0:23:29

      En complément à deux sur 5 bits, 10011 vaut -13 et 01100 vaut 12. La somme vaut -1 (11111).
      • Partager sur Facebook
      • Partager sur Twitter
        14 décembre 2019 à 0:26:13

        Je n'ai pas les réponses à toutes tes questions. 

        Pour -7 et 9 en 4 bits.

        Si on dit à l'ordinateur : Réserve 4 bits pour stocker un entier qui peut être soit négatif, soit positif, l'ordinateur va  effectivement réserver 4 bits pour ça. Mais dans cet emplacement de 4 bits, les nombres qu'il saura stocker sont les nombres de -7 à +8 (ou de -8 à+7... peu importe). Quand tu vas essayer d'écrire le nombre 9 dans cet emplacement, il va se passer l'une des 2 choses suivantes, selon comment le programme a été fait :

        - Soit le programme plante, en disant dépassement de capacité. Fin de l'exécution.

        - Soit le programme accepte ton nombre 9, mais en fait, il se plante. Tu crois qu'il stocke 9, et il stocke -7 (je te fais confiance sur le fait que 1001 correspond à -7).

        Et donc, dans l'opération suivante, tu croiras faire 9+1 par exemple, mais tu feras -7+1.

        Normalement, ça répond aussi à ta question sur 10011 + 01100.

        Dans la vraie vie, je ne connais aucun système qui stocke des entiers sur 4 bits. on est au moins sur 8 bits.  Mais le problème est le même dès qu'on dépasse 128.

        • Partager sur Facebook
        • Partager sur Twitter
          14 décembre 2019 à 5:35:18

          Salut,
          D'abord, le carry et l'overflow sont la même chose, c'est l'interprétation qu'on en fait qui est différence. L'overflow est le carry du bit le plus significatif.
          Sur certains ordinateurs, il y a des compteurs descendants, on peut avoir un underflow si on passe en bas de zéro.
          Il faut savoir comment interpréter la valeur absolue ici.
          Si tu as un registre de 4 bits, 1001 est un nombre négatif car le bit 3 vaut 1. C'est la représentation du -7.
          Pour faire une soustraction, l'ordinateur fait une addition du premier nombre et du complément à 2 du second nombre.
          Pour trouver le complément à 2, imagine un 5ème bit, ce qui donne 10000, ou 16 en décimal. Tu fais 16 - nombre, et tu obtient son complément.
          La valeur 1000 vaut -8 et non +8. La valeur +8 ne peut pas être représenté dans 4 bits (avec signe).
          -8 + 7 = -1, ou 1000 + 0111 = 1111, 16 - 1 = 15 > 1111.
          Essaies -7 + 7 > 1001 + 0111 = 10000 > 0000 + un overflow qui est ignoré.
          10011 + 01100 = 11111. 10011 vaut -13 (32 - 13 = 19) 01100 vaut 12. -13 + 12 = -1. 32 - 1 = 31 > 11111!
          On n'a que les nombres de -8 à +7. Avec 8 bits, on aura de -128 à +127.
          La multiplication et la division se font avec des registres plus grands, en général le double de la longueur de base.
          L'ordinateur ne se plante pas si on lui fait faire des calculs mal interprétés.
          Il ne se plante même pas si on fait une division par 0. Les circuits d'un ordinateur sont plus complexes qu'un simple additionneur.
          C'est le programme qui décide de planter s'il teste le bit overflow et le voit égal à 1, mais il peut ne pas le faire.
          Il y a des tests pour positif/négatif ou zéro/non-zéro.
          • Partager sur Facebook
          • Partager sur Twitter

          Le Tout est souvent plus grand que la somme de ses parties.

          Opérations en Complément à 2

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown