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

Algorithmes et structures de données Discussion :

[Demande d'aide] Complément à deux et binaire


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur Java + Sys.Admin Debian
    Inscrit en
    Mai 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java + Sys.Admin Debian
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2018
    Messages : 2
    Par défaut [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.

  2. #2
    Membre Expert

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Billets dans le blog
    9
    Par défaut [Demande d'aide] Complément à deux et binaire
    Bonjour,

    Citation Envoyé par x9nico Voir le message
    ... 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.

    Nom : [2020-11-28].png
Affichages : 1081
Taille : 8,2 Ko

    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 Voir le message
    ... 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é.

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur Java + Sys.Admin Debian
    Inscrit en
    Mai 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java + Sys.Admin Debian
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2018
    Messages : 2
    Par défaut
    Bonjour, déjà merci pour votre réponse.
    Ce que j'ai oublié de préciser, c'est que c'est en python.

  4. #4
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 292
    Par défaut
    Bonjour

    Citation Envoyé par x9nico Voir le message
    Ce que j'ai oublié de préciser, c'est que c'est en python.
    Un algorithme ne dépend pas du langage. Si tu as un problème de méthode, tu es au bon endroit. Si tu cherches les bonnes instructions, il faut aller dans le forum python.

    Citation Envoyé par wiwaxia Voir le message
    Il y a une solution expéditive: c'est de recourir à l'opérateur NOT ;
    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

    Autrement dit: Comment coder -16 ?
    16 : 0001 0000
    Complément à 1 de 16 (le fameux NOT(16) ) : 1110 1111
    Complément à 2 de 16 : 1111 0000

    Et on vérifie que l'on a juste :

    1610+ (-16)10 = 0001 00002 + 1111 00002 = (1) 0000 00002 = 010
    Tout est juste.

  5. #5
    Membre expérimenté Avatar de Galet
    Homme Profil pro
    Consultant/Programmeur Robotique industrielle
    Inscrit en
    Mars 2010
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant/Programmeur Robotique industrielle

    Informations forums :
    Inscription : Mars 2010
    Messages : 325
    Par défaut
    Bonjour,
    La réponse de Flodelarab est on ne peut plus claire.
    Le complément à 2 est utilisé en automatisme pour changer le signe d'un entier. La majorité des logiciels dédiés implémentent cette fonction à tel point que nombre d'automaticiens ont oubliés cette méthode.
    Si le but est de transmettre des données négatives d'un système à un autre, il faut aussi prendre garde à l'ordre de transmission des octets (Poids fort et poids faible)
    Belle journée...

  6. #6
    Membre Expert

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Billets dans le blog
    9
    Par défaut Complément à deux et binaire
    Citation Envoyé par Flodelarab Voir le message
    ... 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.

Discussions similaires

  1. Demande d'aide pour deux phrases d'accroches.
    Par hélios44 dans le forum CV
    Réponses: 2
    Dernier message: 11/12/2009, 16h44
  2. 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
  3. _winreg et binaire demande d'aide
    Par loupsolitaire dans le forum Général Python
    Réponses: 4
    Dernier message: 24/09/2007, 11h57
  4. demande d'aide sur samba
    Par marcoss dans le forum Développement
    Réponses: 5
    Dernier message: 04/12/2003, 19h38
  5. [TPW][cours]Demande d'aide pour finir un programme
    Par jf dans le forum Turbo Pascal
    Réponses: 21
    Dernier message: 16/06/2003, 18h10

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