[Demande d'aide] Complément à deux et binaire
Bonjour, quelqu'un peut m'aider s'il vous plaît ? Je n'y arrive pas.
Je dois dois écrire une fonction complément(b) qui calcule le complément à 2 d'un nombre binaire donné sous la forme d'un tableau de taille quelconque contenant uniquement les chiffres 1 et 0. La fonction renverra un nouveau tableau de même taille que b. Puis écrire une fonction binaire(n) qui convertit en binaire un entier n donné en base 10. Le résultat sera un tableau de 8 cases contenant chacune le chiffre 0 ou 1, tel que le bit de poids faible se trouve dans la case d'indice 0. On prendra soin de s'assurer que la fonction est uniquement appelée sur des nombres entre 0 et ...
Pour la fonction du complément(b), je sais comment fonctionne le complément à 2, sauf que je ne sais pas comment inverser les 0 et les 1, le reste je sais faire pour ça.
Pour la fonction du binaire(n), je sais convertir en binaire, sauf que je ne sais pas faire le reste.
Merci par avance.
Cordialement.
1 pièce(s) jointe(s)
[Demande d'aide] Complément à deux et binaire
Bonjour,
Citation:
Envoyé par
x9nico
... je ne sais pas comment inverser les 0 et les 1, le reste je sais faire pour ça ...
Il y a une solution expéditive: c'est de recourir à l'opérateur NOT ;
(NOT x) conduit à l'entier y = (28 - 1) - x = 255 - x dans le cas d'un Byte,
à l'entier z = (216 - 1) - x = 65535 - x s'il s'agit d'un Word.
Mais cette solution n'est pas adaptée à l'énoncé de ton problème, qui se réfère à un nombre quelconque de chiffres;
le plus simple est dans ce cas de remplacer le bit u (égal à 0 ou 1) par v = 1 - u ...
ou si tu introduit des booléens de remplacer u (qui vaut True ou False) par (NOT u) ...
ou si tu manipules des chaînes de caractères, de remplacer Char(i) par Char(97 - i) puisque i vaut 48 ('0') ou 49 ('1').
Il y a des options logiques encore plus simples.
PS Une précision m'avait échappé:
Citation:
Envoyé par
x9nico
... Le résultat sera un tableau de 8 cases contenant chacune le chiffre 0 ou 1, tel que le bit de poids faible se trouve dans la case d'indice 0. On prendra soin de s'assurer que la fonction est uniquement appelée sur des nombres entre 0 et ...
L'entier à traiter se trouve donc bien au format Byte., mais l'énoncé n'autorise pas le raccourci proposé.
Complément à deux et binaire
Citation:
Envoyé par
Flodelarab
... Mon cher Wiwaxia, ne confondrais-tu pas le complément à 1 et le complément à 2 ? Parce qu'avec ton conseil, l'image de 0 est 255. Ce qui est faux.
Le complément à 2 est ce qui permet de coder des nombres négatifs à partir des nombres positifs.
(Complément à 2) = (complément à 1) + 1
En effet, je me suis gouré en m'en tenant à l'inversion des bits. Mes excuses à x9nico, qui apportera la correction nécessaire.