IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Mathématiques Discussion :

Complément à deux


Sujet :

Mathématiques

  1. #1
    Membre régulier
    Inscrit en
    Mai 2008
    Messages
    195
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2008
    Messages : 195
    Points : 82
    Points
    82
    Par défaut Complément à deux
    Bonjour,

    Je me renseigne actuellement sur les lacunes que j’ai en informatique pour pouvoir passer à terme une VAE (je n’ai pas de formation en informatique, j’apprends par ci et par là…)
    En reprenant les éléments enseignés sur une licence informatique, j’ai fait le point sur ce que je connaissais et ce que… je ne connaissais pas !
    Je regarde actuellement la partie « Architecture de l’ordinateur » en autodidacte.
    Et je ne comprends pas un point (en page 10 sur 700 pages… c’est mal parti ! )
    Ci-dessous une extraction du tutoriel :

    -------------------------------------------------------------------
    Ce complément à deux se calcule en plusieurs étapes :
    • 1 - On convertit notre nombre en complément à un, en inversant tous les bits du nombre.
    • 2 - On ajoute 1 au résultat : on obtient alors le complément à deux de notre nombre. Ce complément à deux est alors strictement équivalent au nombre d'origine, du point de vue de l'addition, de la multiplication, de la soustraction, etc.
    Pas convaincu ? alors on va prendre un exemple : 7 + (-6). On suppose que ces nombres sont codés sur quatre bits.
    Pour 7, pas de changements, ça reste 0111. Pour coder -6, on va :
    • prendre 6 : 0110 ;
    • calculer son complément à 1 : 1001 ;
    • calculer son complément à 2 : 1010.
    Ensuite, il nous faut faire l'addition : 0111 + 1010 = 10001.
    Et là, on prend en compte le fait que nos deux nombres de base sont codés sur 4 bits ! On ne doit garder que les 4 derniers bits de notre résultat. Le résultat de 0111 + 1010 = 10001, une fois tronqué sur 4 bits, donnera alors 0001. On trouve bien le bon résultat.
    ----------------------------------------------------------------------------------------------------


    Pour obtenir 6 en binaire, tout est bon.
    Pour calculer le complément à 1, c’est bon aussi.
    Mais pour calculer le complément à 2, je ne comprends pas.
    Ajouter 1 au résultat ? Est-il possible de décomposer cette partie-là pour que je comprenne le cheminement ?
    Idem pour l’addition :
    7 – 6 = 1 => 0111 + 1010 = 0001 mais d’où vient le 1 du bit le plus fort ? Cela ne peut être pour le signe car nous sommes positif. Cela devrait être 0
    D’avance merci pour votre aide.

  2. #2
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 697
    Points
    10 697
    Billets dans le blog
    21
    Par défaut
    Citation Envoyé par BOU59000 Voir le message
    pour calculer le complément à 2, je ne comprends pas.
    Ajouter 1 au résultat ? Est-il possible de décomposer cette partie-là pour que je comprenne le cheminement ?
    L'aspect important pour comprendre le complément à deux est de comprendre la grosse lacune du complément à 1 : la représentation du 0.

    Le 0 est le seul nombre qui est égal à son opposé (+0 = -0). De ce fait, en complément en 1, il dispose de 2 représentations :
    • +0 = 0000
    • -0 = - (+0) = 1111


    Aussi, pour éviter ce soucis, le complément à 2 a été introduit, avec, comme tu l'as bien expliqué, l'ajout d'une unité. Si on fait cela, la représentation de -0 = 1111 devient 0000 (+1 bit de retenu qui tombe dans les oubliettes). Et la magie opère : la représentation de -0 en complément à 2 est 0000, qui correspond à la représentation de +0000.

    Voilà pour l'explication de ce +1.

    Citation Envoyé par BOU59000 Voir le message
    Idem pour l’addition :
    7 – 6 = 1 => 0111 + 1010 = 0001 mais d’où vient le 1 du bit le plus fort ? Cela ne peut être pour le signe car nous sommes positif. Cela devrait être 0
    D’avance merci pour votre aide.
    Il n'y a pas d'erreur ici non. La soustraction d'un nombre à un autre nombre correspond à une addition d'un nombre négatif à un autre.
    Ainsi :
    7 - 6 = 7 + (-6) = (0111) + (- 0110) = (0111) + (1010 complément à 2 de 0110) = 10001 = 0001 si on ne garde que les 4 derniers bits
    En complément à 2, le bit de poids le plus fort indique bien le signe du nombre. 0 = positif (ou nul !), 1 = négatif (strictement).
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  3. #3
    Membre régulier
    Inscrit en
    Mai 2008
    Messages
    195
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2008
    Messages : 195
    Points : 82
    Points
    82
    Par défaut
    *) En base 2, sur 4 bits:

    6 correspond à 0110 (0x2^0 + 1x2^1 + 1x2^2 + 0x2^3)

    Pour avoir -6, je passe en complément à 1 donc j'inverse les bits

    -6 => inversion de 0110 => 1001

    Puis je dois ajouter 1.
    C'est cette partie que je ne comprends pas.
    Comment passer de 1001 à 1010? (Comment doit on ajouter ce 1?)

    *) Merci pour les explications. Cela est plus clair pour moi pour l'autre partie.
    Je réfléchissais à la somme 7 + (-6) => 1 (soit 0001) et 7 + 10 = 1 0001 => 0001 sur 4 bits et effectivement c'est magique.
    Dès que j'ai bien assimilé l'ajout du 1, je teste cela sur plusieurs cas

  4. #4
    Membre régulier
    Inscrit en
    Mai 2008
    Messages
    195
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2008
    Messages : 195
    Points : 82
    Points
    82
    Par défaut
    Edit:
    C'est bon en fait...
    J'écris trop vite...

    1) 1001 = 9
    2) 9 + 1 = 10
    3) et 10 = 1010...

    Merci pour votre réponse

  5. #5
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 133
    Points
    15 133
    Par défaut
    Yop !
    Citation Envoyé par BOU59000 Voir le message
    Comment passer de 1001 à 1010 ? (Comment doit-on ajouter ce 1 ?)
    et là on fait comme à l'école, mais en binaire et en partant de la droite : 1 + 1 = 10, je pose 0 et je retiens 1, ensuite je me décale un cran à gauche, j'ai ma retenue et je continue, donc :1 (de retenue) + 0 + rien (ou 0, si tu préfères) = 1, je pose 1 et je continue, décalage, 0 + rien = 0, je le pose, décalage, 1 + rien = 1 je le pose aussi et voilà.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  6. #6
    Membre régulier
    Inscrit en
    Mai 2008
    Messages
    195
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2008
    Messages : 195
    Points : 82
    Points
    82
    Par défaut
    Merci pour l'info

    Je continue ma progression dans le monde magique de l'architecture de l'ordinateur.

    J'encaisse les infos mais parfois il me manque des éléments dans le tuto que je parcours.

    L'ordinateur adore les 0 et les 1.
    Et il peut tout stocker.
    Mais pour qu'il puisse reconnaitre un texte, d'un chiffre, d'un son... nous devons luis indiquer à quoi correspondent les informations.
    Jusque la, je suis d'accord!

    Et d'un coup on passe à l'ASCII et l'unicode pour les correspondances avec les caractères.

    Mais comment j'indique à mon ordinateur s'il s'agit d'un texte, d'un son...?

  7. #7
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 133
    Points
    15 133
    Par défaut
    Citation Envoyé par BOU59000 Voir le message
    L'ordinateur Le processeur adore les 0 et les 1.
    [...]
    Mais comment j'indique à mon ordinateur s'il s'agit d'un texte, d'un son...?
    Tu mélanges processeur (celui qui ne connaît que des 0 et des 1 et pour qui 1 + 1 = 10), l'objet stupide (dans le sens où tout est mécanique : de la mécanique électronique, oui ! Un transistor qui passe de 0 à 1 entraîne d'autres transistors à en faire de même en fonction de comment ils sont câblés) qui est à la base de tout, et la machine intelligente (enfin, manière de dire) qui s'appuie sur le processeur pour présenter au pinpin devant l'écran des informations ordonnées par des programmes écrits par d'autres pinpins, et qui décident, dans leurs programmes, que fichier.txt est un fichier de texte alors que fichier.wav c'est du son.

    Mais si c'est moi qui code, je peux très bien m'amuser à mettre du son dans un .txt et à écrire des lettres dans un .wav ! Bien sûr je ne serai compatible avec personne mais chez moi ça fonctionnera.

    Et pour faire fonctionner tout ça, il y aura, au cœur de tout ça, un... processeur qui va continuer à additionner ou soustraire des 0 et des 1, et, que tu aies du texte ou une photo à l'écran, un bip dans le haut-parleur lors d'une erreur ou du Mozart, le processeur n'en a aucune idée, pour lui tout ça n'est que 0 et 1.

    Valà...
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  8. #8
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 618
    Points : 188 591
    Points
    188 591
    Par défaut
    Par contre, le processeur traitera différemment les données que tu lui présentes selon le type que tu indiques au processeur : si tu lui dis d'additionner deux registres comme des entiers signés (complément à deux), il ne bronchera pas ; de même pour des nombres à virgule flottante (IEEE 754), il obéira ; si tu lui dis de vérifier la valeur de tel bit dans un registre, il le fera. Par exemple, si tu demandes à ton processeur d'additionner deux nombres comme s'ils étaient à virgule flottante alors que ce sont des nombres entiers signés, le résultat n'aura pas de sens, mais le processeur n'en saura rien.
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. complément à deux d'un nombre binaire
    Par morbak.exe dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 28/02/2009, 13h36
  2. Complément à deux
    Par madjidri dans le forum C++
    Réponses: 1
    Dernier message: 27/05/2007, 17h16
  3. Réponses: 5
    Dernier message: 25/03/2003, 19h43
  4. Eviter deux nombres identiques dans un tirage aléatoire
    Par moon tiger dans le forum Pascal
    Réponses: 5
    Dernier message: 25/11/2002, 09h57
  5. soustraire deux dates ?
    Par joejoe dans le forum SQL
    Réponses: 2
    Dernier message: 19/07/2002, 15h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo