Forum Programmation.autre Complémentation à 2

Posté par  .
Étiquettes : aucune
0
1
fév.
2008
Salut à tous !

Lorsqu'on associe à une variable un décimal, celui est alors codé en complémentation à 2, en binaire.

Je dois, à partir d'une complémentation à 2, sur x bits (signé) réussir à réaliser une conversion binaire <> décimale.
Pour cela, je peux utiliser les opérateurs de décalage et les opérateurs bits à bits.

J'ai beau regarder, j'arrive à "créer" la complémentation, mais faire le chemin inverse, impossible.

Pourriez-vous m'aider un peu ?

Merci
  • # C'est pourtant simple ...

    Posté par  . Évalué à 3.

    Tu fais la même chose ...

    Explication: pour obtenir le complément a deux d'un nombre:
    on fait le complément à un du nombre binaire, et on ajoute 1


    0101 codage de 5 en binaire
    1010 complément à un
    1011 on ajoute 1 : représentation de -5 en complément à deux

    Pour faire l'inverse:

    1011 on ajoute 1 : représentation de -5 en complément à deux
    0100 complément à 1
    0101 on ajoute 1

    Après il faut savoir que, en binaire,
    5=1*2^0+0*2^1+1*2^2+0*2^3

    Note que la notion de complément à deux nécessite de définir un format de données (dans notre exemple, 4 bits), et que le bit de poids forts est le bit de signe (=0: Nombre positif, =1, nombre négatif).

    A partir de la, pour transformer un nombre binaire (positif ou négatif) il faut:
    1 déterminer son signe en fonction du bit de signe
    2 si négatif, positionner le signe à "-" et effectuer le omplément a 2 de ta valeur (pour obtenir la valeur positive.
    3/ Si positif, mettre le signe à "+"
    4 convertir la valeur binaire (soit originelle si le bit de signe est à 0, soit celle issue de l'étape 2 si bit de signe=1) en décimal.
    - prendre en compte le signe détermoné a l'étape 2 ou 3

    J'espère que ça répond à tes questions.

    Sinon pour comprendre e complément à deux:

    Toujours sur 4 bits: 0=0000b=0x0. OK?

    Retire 1 à cette valeur: sur 4 bits, tu obtiens en binaire 1111, ou 0xf en hexa, soit -1 en decimal.

    Complément à deux de 1111:

    1111 valeur initiae.
    0000 Complément à 1
    0001 on ajoute 1

    compris ?
    • [^] # Re: C'est pourtant simple ...

      Posté par  . Évalué à 1.

      Merci beaucoup pour ton explication claire.

      J'ai compris comment passer de l'un à l'autre.
      Mais on me demande d'utiliser les opérateurs de décalage ou bits à bits, tu saurais comment faire ?

      Merci

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.