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 :

Comparer deux nombres représentés en complément à 2


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2020
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2020
    Messages : 39
    Par défaut Comparer deux nombres représentés en complément à 2
    Bonjour à tous,

    Comment faire pour comparer 2 nombres représentés en compléments à 2 ?

    J'ai mis ceci mais pas sûre que ce soit suffisant :

    1. Comparer leur bit fort => Le nombre commençant par 0 sera plus grand

    2. Ensuite il faut comparer les bits un à un en partant de la gauche, le 1 sera supérieur au 0.

    Merci pour votre aide !

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 197
    Billets dans le blog
    47
    Par défaut
    Bonsoir,

    Ou alors : A > B <==> A - B > 0

    Tu fais la soustraction A + (-B) et tu regardes le signe du résultat (son bit de poids fort).

  3. #3
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 634
    Par défaut Nombre signé déguisés
    Bonjour,

    Les entiers signés utilisent déjà le complément à 2. Par exemple en 32 bits, -a correspondra à la valeur non signée 232 - a.

    Bonne nouvelle (même si elle est très ancienne), les CPU traitent directement les entiers signés donc en complément à 2. Alors pour comparer deux nombres il suffit d'écrire a < b ou de caster (c'est à dire forcer le type de) l'expression int(a) < int(b) si les variables a et b ont été initialement déclarées comme non signées.

    Salutations

  4. #4
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2020
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2020
    Messages : 39
    Par défaut
    Citation Envoyé par Guesset Voir le message
    Bonjour,

    Les entiers signés utilisent déjà le complément à 2. Par exemple en 32 bits, -a correspondra à la valeur non signée 232 - a.

    Bonne nouvelle (même si elle est très ancienne), les CPU traitent directement les entiers signés donc en complément à 2. Alors pour comparer deux nombres il suffit d'écrire a < b ou de caster (c'est à dire forcer le type de) l'expression int(a) < int(b) si les variables a et b ont été initialement déclarées comme non signées.

    Salutations

    Merci beaucoup pour ton aide !

    Je voudrais faire un programme en python qui demande de saisir deux nombres en complément à 2 et les comparer.

    Mon code est-il correct ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    print ('Veuillez saisir deux nombres en code binaire sur 4 bits.')
    print ('Rappel les nombres ne doivent contenir que des 0 ou des 1.')
     
    a= int(input('Veuillez saisir votre premier nombre')
    b= int(input('Veuillez saisir votre second nombre')
     
    def comparaison(a, b):
     
        if (a == b): # A = B
            return 0
        elif (a[0] == 1 and b[0] == 0): # A < 0 et B > 0
            return -1
        elif (a[0] == 0 and b[0] == 1): # A > 0 et B < 0
            return 1
        else:
            for i in xrange(1, 8): # Pour i de 1 à 7
                if (a[i] > b[i]):
                    return 1
                elif (a[i] < b[i]):
                    return -1

  5. #5
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2018
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2018
    Messages : 104
    Par défaut
    Salut,

    Tu sembles utiliser tes variables a et b comme des tableaux de bits. Dans ce cas, tu devrais plutôt les initialiser avec le code ci-dessous (syntaxe de "compréhension de liste") :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a = [int(c) for c in input(...)]
    Aussi, je ne vois pas la logique de faire le test "a == b". Si tu programme cette fonction, c'est logiquement que tu t'interdis d'utiliser ces opérateurs entre entier. La solution consiste juste à retourner 0 à la fin de ta fonction si rien n'a été retourné avant.

    Enfin, je reprends le sujet de base en disant que le complément à 2, c'est comme des entiers normaux, mais juste dont le 1er bit a un poids négatif. Ainsi, tu peux retirer tes conditions initiales, et dans ta boucle, tu peux faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for i in xrange(0, 8):
        if (a[i] > b[i]):
            return 1 if i >= 1 else -1
        elif (a[i] < b[i]):
            return -1 if i >= 1 else 1
    Tu sembles utiliser Python 2. Je ne connais que Python 3, donc j'espère que les syntaxes que j'ai utilisées fonctionnent.

    PS : Tu te contredis : c'est sur 4 bits ou sur 8 bits ?

  6. #6
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2020
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2020
    Messages : 39
    Par défaut
    Hello Je te remercie pour ta réponse

    mais je ne comprends pas ton code
    il faut d'abord tester le bit de signe ensuite les autres bit mais si on boucle sur le premier on ne résoud pas le problème ?

  7. #7
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2020
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2020
    Messages : 39
    Par défaut
    Citation Envoyé par f-leb Voir le message
    Bonsoir,

    Ou alors : A > B <==> A - B > 0

    Tu fais la soustraction A + (-B) et tu regardes le signe du résultat (son bit de poids fort).

    Merci beaucoup pour ton aide je comprends mieux !

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

Discussions similaires

  1. [XL-2010] Comparer deux nombres dans une chaine de caractères
    Par halaster08 dans le forum Excel
    Réponses: 11
    Dernier message: 24/08/2018, 11h50
  2. comparer deux nombres
    Par pepsister dans le forum Excel
    Réponses: 2
    Dernier message: 05/08/2010, 12h12
  3. [Batch] Comparer Deux Nombres Généres par un RANDOM
    Par AZzjeioafh dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 22/09/2009, 20h19
  4. [date] Comparer deux formats différents
    Par terziann dans le forum Requêtes
    Réponses: 17
    Dernier message: 21/07/2003, 15h21
  5. 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

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