Partage
  • Partager sur Facebook
  • Partager sur Twitter

Soustraction binaire

    12 janvier 2015 à 9:56:33

    J'ai commencé à faire des cours sur l'électronique numérique et je bloque sur une soustraction binaire,

    est ce que quelqu’un peut me détaillé l’opération suivante : 1001-0111

    Je sais le résultat c'est 10 mais comment ???

    1) 1-1 = 0 (première colonne de l'opération posée)

    2)0-1 (là je fait un empreint de 1 à la colonne de gauche mais y a un 0!! ?? comment faire???

    Merci d'avance pour la réponse

    • Partager sur Facebook
    • Partager sur Twitter
      12 janvier 2015 à 10:11:20

      Bon bon bon alors en décimal ça fait si je ne me trompe pas 9-7 = 2 (:p dur !)

      Alors détaillons :

      1 0 0 1

      0 1 1 1

      - - - - - 

      0 0 1 0

      |  |  |_> 10 - 1 = 1 ! Ha bah oui car 0-1 impossible donc on emprunte 10 à la colonne qui suit
      |  |___> 10 - 1 -1 = 0 ! Pareil que le précedent mis à part qu'il ne faut pas oublier le -1 du à l'emprunt
      |_____> 1-1 = 0 ! Ne pas oublier l'emprunt qui a été fait avec la colonne précédente

      -
      Edité par Proktor 12 janvier 2015 à 10:13:14

      • Partager sur Facebook
      • Partager sur Twitter
      Ce matin, je suis en mode agression. Désolé.
        12 janvier 2015 à 16:27:19

        Bonjour Gilles,

        Une petite recherche aurait été très appréciée, surtout que la solution tombe en deuxième résultat lors d'une recherche de "soustraction" (le premier résultat étant ton topic).

        Lien de recherche : http://openclassrooms.com/recherche/?search=soustration

        Lien direct vers la solution : http://openclassrooms.com/forum/sujet/soustraction-binaire-1

        Copié/collé de ce que j'y ai écrit :

        lorrio a écrit:

        Pour poser une soustraction, il te faut reprendre tes tout premier cours (primaire) et appliquer la même chose en base 2.

        Pour traiter ceci :

            1010
        -   0011

         Histoire de faire apparaitre les retenues, je vais ajouter des espaces ;)

            1   0   1   0
        -   0   0   1   1
        =

        Il est impossible de faire faire 0-1 donc on ajoute une retenue :

            1   0   1  10
        -   0   0   1   1
        =

        Bien évidement, si j'ajoute une retenue en haut, je dois aussi ajouter +1 en bas donc le 1 devient 2 soit 10 en binaire

            1   0   1  10
        -   0   0  10   1
        =

         A partir de là, on peut faire le premier chiffre : 10 - 1 = 1 (car en décimal, cela donne 2 - 1 = 1)

            1   0   1  10
        -   0   0  10   1
        =               1

         Passons maintenant au deuxième que l'on ne peut pas faire non plus, il faut donc une retenue :

            1   0  11  10
        -   0   1  10   1
        =               1

         Et le résultat qui va avec : 11 - 10 = 1 (car en décimal, cela donne 3 - 2 = 1)

            1   0  11  10
        -   0   1  10   1
        =           1   1

         Troisième chiffre, encore une retenue :

            1  10  11  10
        -   1   1  10   1
        =           1   1

         Troisième résultat :

            1  10  11  10
        -   1   1  10   1
        =       1   1   1

         Quatrième résultat :

            1  10  11  10
        -   1   1  10   1
        =   0   1   1   1

         Et donc au final : 1010 (10) - 0011 (3) = 0111 (7)

        On retombe bien sur nos pattes :)


        Sinon, plus simple, tu peux transformer les soustractions en addition à complément à 2.

        Pour cela, il te faut inverser les 0/1 puis ajouter 1 puis faire une addition.

        Voici ce que cela donne :

        Inversion de 0011 (3) => 1100

        Ajout de 1 à 1100 => 1101

        Addition de 1010 (10) et 1101

            1010
        +   1101
        =  10111

        Comme on est que sur 4 bits, tu oublies le chiffre le plus à gauche et il ne reste alors que 0111 (7)

        Voila comment transformer une soustraction en addition ;)

        C'est d'ailleurs ce principe qui est utilisé dans les PC : ils n'ont pas de soustracteurs mais uniquement des additionneurs et inverseurs

        -
        Edité par lorrio le 12 novembre 2014 à 19:12:14



        • Partager sur Facebook
        • Partager sur Twitter
          12 janvier 2015 à 17:02:59

          ah d'accord on fait un emprunt de 10 et pas de 1 alors? c'est ça qui m'as bloqué du coup! ptin sur le bouquin il est dit emprunt de 1! je comprends plus rien là.

          > 10 - 1 = 1 ! Ha bah oui car 0-1 impossible donc on emprunte 10 à la colonne qui suit

          ==> d'ou il vient ce 10? c'est pas un 1 qu'on emprunte? dû coup à la colonne qui suit ça fera -1 (dû à l'emprunt)-1=-2 et pas zéro!! c'est là que je comprends pas d’où viens ce 10?,effectivement 10-1-1=0 (10-1=1 et 1-1=0)

          • Partager sur Facebook
          • Partager sur Twitter
            12 janvier 2015 à 17:40:41

            Oui merci lorrio je suis tombé sur ce topic,mais ça m'as embrouillé encore plus!

            Mais quand on a deux zéros a la suite ça ne marche plus :

            1  0  0  1

            0  1  1  1

            1) colonne   1 - 1 = 0     ok

            2) colonne   0 - 1  là je fait un emprunt de 1  ça devient  10 - 1 = 0 je reporte en bas le 1 (ce qui fait 11)

            3) colonne   0 - 1 (et le 1 de la précédente colonne) ce qui fait  11 on  arrive à  10 - 11 = je bloque

            et sur le bouquin il ne parle jamais de faire la soustraction comme en décimale "systèmes numérique FLOYD 9e édition page 58" si quelqu'un là.

            Mais bon c'est toujours pareil il te donne un exemple facile 101 - 011 , mais en exercice il te donne  1001 - 0111 en plus il se contente de mettre le résultat sans explication! moi je suis désole mais je bloque là.Après faire l'addition en complément à deux j'ai compris lol

            il le mentionne dans les leçons suivante : "la soustraction d'un nombre équivaut à l'addition de son complément à deux"

            0 1 1 1 compl à 2 = 1001   1001+1001 = 0010  ok .

            • Partager sur Facebook
            • Partager sur Twitter
              12 janvier 2015 à 17:52:16

              à 4 bits = 0010 j'ai enlevé le 1 sinon biensur ça fait  10010
              • Partager sur Facebook
              • Partager sur Twitter
                12 janvier 2015 à 18:22:52

                lol ça y est j'ai compris pour l'exemple de Lorrio,ok ok ça reviens au même avec la soustraction décimal!

                Par contre l'exemple de Proktor avec les retenue -1 (d'ailleur comme expliqué sur le bouquin) là,je sèche encore!!

                • Partager sur Facebook
                • Partager sur Twitter
                  12 janvier 2015 à 18:38:08

                  ah ça y est aussi je viens de trouver tout à la suite!!! lol chez moi quand ça veut pas ,ça veut pas!!!

                  Aller là j'ai compris  donc à la troisième colonne j'ai un -1 j'emprunte un 1  à la colonne de gauche créant un 10 ,donc 10-1 =1-1=0!! ouffff

                  Par contre à la fin c'est 0 - 0 =0 car un 1 emprunté à la dernière colonne de gauche il reste 0

                  • Partager sur Facebook
                  • Partager sur Twitter
                    12 janvier 2015 à 19:20:24

                    Sympa le quintuple post :)

                    Au pire, tu appliques ma petite astuce de complément à deux qui te permet de transformer une soustraction en une addition.

                    Elle marche à tous les coups et c'est plus simple de faire une addition qu'une soustraction ;)

                    -
                    Edité par lorrio 12 janvier 2015 à 19:21:04

                    • Partager sur Facebook
                    • Partager sur Twitter
                      12 janvier 2015 à 19:44:13

                      Comme je suis gentil, je te redonne un exemple :

                      Imaginons que tu veux faire 11001100 - 01011110.

                      En décimal, cela donne : 204 - 94 = 110 en décimal, et donc 01101110 en binaire

                      Maintenant, procédons par étape :

                      En tout premier, il faut changer les 0 en 1 et vice versa de la soustraction.

                      Du coup 01011110 devient 10100001

                      Maintenant, il te faut additionner le premier chiffre (11001100) avec le second inversé (10100001) ainsi qu'un +1 (que l'on symbolisera par une première retenue).

                      Ce qui nous donne donc :

                                1  <= Ligne des retenues
                         11001100
                      +  10100001
                      ===========
                         ????????

                      On commence par faire la colonne la plus à droite 1 + 0 + 1 = 10 (ou 2 en décimal, c'est comme tu veux), ce qui nous donne 0 et une retenue de 1 pour la prochaine addition.

                      On reporte le résultat sur notre calcul et on a alors :

                               11  <= Ligne des retenues
                         11001100
                      +  10100001
                      ===========
                         ???????0

                      Maintenant, on traite la colonne suivante : 1 + 0 + 0 = 1, facile, pas de retenue :)

                              .11  <= Ligne des retenues
                         11001100
                      +  10100001
                      ===========
                         ??????10

                      Encore un facile avec . + 1 + 0 = 1

                             ..11  <= Ligne des retenues
                         11001100
                      +  10100001
                      ===========
                         ?????110

                      Toujours le même facile avec . + 1 + 0 = 1

                            ...11  <= Ligne des retenues
                         11001100
                      +  10100001
                      ===========
                         ????1110

                      Pour celui là, c'est pas trop dure non plus : . + 0 + 0 = 0, toujours pas de retenue

                           ....11  <= Ligne des retenues
                         11001100
                      +  10100001
                      ===========
                         ???01110

                      Toujours le même facile avec . + 1 + 0 = 1

                          .....11  <= Ligne des retenues
                         11001100
                      +  10100001
                      ===========
                         ??101110

                      Toujours le même facile avec . + 1 + 0 = 1

                         ......11  <= Ligne des retenues
                         11001100
                      +  10100001
                      ===========
                         ?1101110

                       Ahah, enfin un plus dure avec . + 1 + 1 = 10 soit un résultat de 0 avec une retenue de 1

                        1......11  <= Ligne des retenues
                         11001100
                      +  10100001
                      ===========
                         01101110

                      Et comme on est sur 8 bits, on va s'arrêter là avec un résultat de 01101110, ce qui nous donne bien le chiffre 110 en décimal.

                      -
                      Edité par lorrio 12 janvier 2015 à 19:50:31

                      • Partager sur Facebook
                      • Partager sur Twitter
                        13 janvier 2015 à 12:40:37

                        ok merci pour cet exemple j'ai bien compris c'est cool,après j'aurai sans doute d'autres questions car je compte bien poursuivre le bouquin jusqu'à la fin ! c'est super intéressant de savoir comment fonctionnent les circuits logiques,j'aimerai aussi apprendre le langage assembleur,mais bon pour plus tard lol.

                        Pour avoir directement le complément à deux:

                        exemple 11100010 on inverse les bits à partir du premier 1 en partant de la droite mais on inverse pas le premier bit:

                        00011110 voila et j'ai directement le complément à deux on peut vérifier :

                        11100010 ==> compl à 1 ça donne 00011101

                        00011101 + 1 = 00011110

                        • Partager sur Facebook
                        • Partager sur Twitter
                          13 janvier 2015 à 12:59:53

                          Sauf que tu t'es planté dans ton exemple ...

                          Si je prends 11100010 et que j'inverse tout sauf le premier, on obtiens 00011100 et non 00011110

                          Pour que ça marche, il faudrait dire on inverse tout sauf les 2 premiers et on obtiens alors 00011110

                          Sauf que c'est un cas particulier qui ne marchera pas à chaque fois...

                          On peut prendre l'exemple de 11111100 :

                          - si j'inverse tout, cela fait 00000011 ; si j'ajoute le +1, cela fait donc un complément à 2 qui vaut 00000100

                          - si j'inverse tout sauf les 2 derniers, j'obtiens 00000000 => c'est pas bon

                          - si j'inverse tout sauf le dernier j'obtiens 00000010 => c'est pas bon non plus

                          Bref, un complément à 2, c'est inversion de tous les bits puis un +1 ; il n'y a pas d'autres façon de l'obtenir.

                          -
                          Edité par lorrio 13 janvier 2015 à 13:01:15

                          • Partager sur Facebook
                          • Partager sur Twitter
                            13 janvier 2015 à 16:28:45


                            11111100  en commençant par le LSB j'écris les bits tels qu'ils sont en me déplaçant vers la gauche jusqu'au premier 1 en l'incluant aussi,ensuite j'inverse les bits

                            00000100= complément à 2

                            vérification :

                            00000011 = complément à 1.

                            00000011 + 1 = 00000100  = complément à 2.

                            Mais bon c'est difficile de s'exprimer à distance!

                             Autre exemple :

                            11100010

                            00011110 = complément à deux

                            Vérification :

                            00011101 = complément à 1 

                            00011101+1 = 00011110 complément à 2

                            • Partager sur Facebook
                            • Partager sur Twitter

                            Soustraction binaire

                            × 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