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 :

Extraire un chiffre en binnaire


Sujet :

Algorithmes et structures de données

  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 61
    Par défaut Extraire un chiffre en binnaire
    Bonsoir, voila je voudrais savoir comment extrair des nombre dans un nombre en binnaire:

    je m'explique:

    j'ai par example un nombre en binnaire (4100)

    0001 || 00 || 0000000100

    je voudrai savoir comment on peut extraire chaque nombre ?

    (le 100 (4) // le 00 (0) // le 0001 (1))

    extraire le 4 0 et 1 ?

    le seul nombre que j'arrive a extraire est le "4" en faisant 4100 MOD 1024

    d'avance merci

  2. #2
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 61
    Par défaut
    je vien de trouvé une solution possible:

    donc pour extraire le on fait

    4100 mod 1024 = 1

    ensuite pour virer la premiere partie:

    4100 / 1024 = 4 (000100)

    pour recup les 2 eme nombre:

    4 mod 4 = 0

    ensuite pour viré:

    4 / 4 = 1 (0001)

    pour extraire:

    1 mo 16 = 1



    si quelqu'un connait une (Meilleur) solution, je suis prenneur

    merci

  3. #3
    Expert confirmé

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 819
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 819
    Par défaut Re: Extraire un chiffre en binnaire
    Salut

    Citation Envoyé par BoBy9
    j'ai par example un nombre en binnaire (4100)
    4100, c'est pas trop binaire comme nombre...

    Citation Envoyé par BoBy9
    0001 || 00 || 0000000100

    je voudrai savoir comment on peut extraire chaque nombre ?

    (le 100 (4) // le 00 (0) // le 0001 (1))
    ???? c'est quoi ces nombres???

    Citation Envoyé par BoBy9
    4100 mod 1024 = 1
    En temps normal, 4100 mod 1024 ça fait 4...

    Citation Envoyé par BoBy9
    pour recup les 2 eme nombre:
    4 mod 4 = 0
    Pourquoi modulo 4??

    Citation Envoyé par BoBy9
    si quelqu'un connait une (Meilleur) solution, je suis prenneur
    Disons que je ne sais pas si ta méthode est bonne, elle est présentée de manière tellement bordélique que je ne pige pas la logique...

    La méthode habituelle, c'est de diviser ton nombre décimal par des puissances de 2 décroissantes, la partie entière de la division donnant le chiffre binaire du rang courant, et de continuer avec la puissance de deux immédiatement inférieure à diviser le reste de la division précédente.
    Pour illustrer, la première puissance de 2 inférieure à 4100, c'est 2^12=4096, donc tu te fais un tableau à 12 cases, pour stocker ke résultat.

    4100/4096=1, reste 4 (l'équivalent du 4100 mod 4096). Tu mets le 1 dans la 12ème case du tableau
    puissance de 2 inférieure: 2^11=2048, et 4/2048=0, reste 4. Tu mets un 0 dans la 11ème case
    puissance de 2 inférieure: 2^10=1024, et 4/1024=0, reste 4. Tu mets un 0 dans la 10ème case
    Ainsi de suite, jusqu'à:
    puissance de 2 inférieure: 2^2=4, et 4/4=1, reste 0. Tu mets un 0 dans la 2ème case
    Ensuite, vu que le reste est 0, tu remplis les cases qui restent avec des 0.

    Et tu trouves ton résultat:
    1 0 0 0 0 0 0 0 0 0 1 0 0

    Reste plus qu'à mettre les zéros qu'il faut à gauche pour avoir le bon nombre de chiffres que tu veux...
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  4. #4
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Par défaut Re: Extraire un chiffre en binnaire
    Citation Envoyé par plegat
    Disons que je ne sais pas si ta méthode est bonne, elle est présentée de manière tellement bordélique que je ne pige pas la logique...
    Tout à fait d'accord !

    Par contre, la méthode la plus simple pour extraire certains bits, c'est de faire des "masques" avec l'opérateur & (et bit-à-bit):

    4 & 4 = 4
    5 & 4 = 4
    9 & 4 = 0
    13 & 5 = 5
    12 & 5 = 4
    ...

    Après, on peut utiliser !!x pour tranformer le réulstat en 0 ou 1, faire des décalages de bits avec >> et <<...

    En C++, il est également possible d'utiliser des structures avec des champs de bit (voir: http://c.developpez.com/tutcpp/c1219.php, paragraphe 3.1.4). C'est très clair, mais ça produit des exécutables un peu plus gros (à cause du "mapping" sur les bits), mais c'est un problème secondaire.
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 61
    Par défaut
    Oulala, oui en effet, j'ai pausé la question en toute vitesse, et je vien de me relire, c'est totalement incompréhensible !

    Si vous me le permetter, je vais la reformulé (Pour plegat et pcaboche, je ne suis pas sur que c'est que je voulais savoir )

    Donc, j'ai un nombre en en Base 10 : 4100, que je transforme en binnaire

    0001000000000100

    Sur ce binnaire, je fait 3 coupures:

    0001 || 00 || 0000000100

    Et en faite, mon objéctif, est de récupérer le nombre que chaques sections contiend. Dans cette example, cela serai(de droite à gauche) le : 4 , 0 et 1

    pour faire ceci , je fait:

    4100 mod 1024 pour extraire le "4" (1024 car 2^10)

    ensuite, je vire le 4 (pour obtenir: 0001 || 00 )

    je divise donc 4100 par 1024

    et ainsi de suite..


    d'avance merci

  6. #6
    Expert confirmé

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 819
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 819
    Par défaut
    Aaaahh, ben là c'est plus clair!

    Alors ok pour ta méthode... si tu ne tombes pas sur des erreurs d'arrondi en faisant les divisions... sauf que 4100 mod 1024 ça fait toujours 4!

    donc, 4100 mod 1024 =4, ensuite tu utilises (4100-4)/1024 (ou 4100/1024 si tu travailles en division entière), et tu continues de même avec ton modulo 4, et ton modulo 16
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  7. #7
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Par défaut
    Il y a beaucoup plus simple et plus rapide. Imaginons qu'on ait les variables droite, milieu et gauche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    droite = nombre & 1023 ;
    milieu = (nombre & 3072) >> 10 ;
    gauche = (nombre & 61440) >> 12 ;

    Sinon, comme je le disais, il y a aussi les "champs de bits" du C++ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    struct champ_de_bits
    {
        unsigned int gauche : 4;   /* Premier champ : 4 bits. */
        unsigned int milieu : 2;   /* Deuxième champ : 2 bits. */
        unsigned int droite : 10;  /* Dernier champ : 10 bits. */
    };
    Voilà.
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  8. #8
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 61
    Par défaut
    ah oui oui oui!

    je suis tout à fait d'accord, mais le problème c'est que je ne code pas avec C++




    avec ada ^^

  9. #9
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Par défaut
    Citation Envoyé par BoBy9
    je suis tout à fait d'accord, mais le problème c'est que je ne code pas avec C++

    avec ada ^^
    Je crois qu'avec ADA, je crois que c'est plus simple encore (c'est prévu dans le langage). Malheureusement je n'ai jamais programmé en ADA.

    Pose ta question dans la rubrique "Autres langages", il y a peut-être des spécialistes d'ADA qui trainent.

    Note: les opérateurs &, << et >> existent dans de nombreux langages. J'ai donné un exemple en C, mais ça aurait été la même chose dans pas mal de langages (pour ADA, je ne sais pas).
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  10. #10
    Membre Expert
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Par défaut
    Ada c'est bien, mangez-en

    Pour faire l'équivalent des champs de bit il faut regarder du côté des clauses de représentation

    http://www.ada-france.org/IMG/pdf/c_to_ada_1.0c.pdf partie 12.1

    Plus propre qu'en C (vais me prendre une baffe si je continue comme ça moi)

    Je serais étonné qu'il n'y ait pas moyen de faire des décalages... mais je ne connais pas non plus

  11. #11
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 61
    Par défaut
    ok, mercie beacoup, je vais me renseigné !

Discussions similaires

  1. extraire 2 chiffres dans un champ
    Par nick774 dans le forum ASP
    Réponses: 4
    Dernier message: 31/10/2007, 20h30
  2. [MySQL] extraire les chiffres d'une chaine
    Par megane dans le forum Langage SQL
    Réponses: 4
    Dernier message: 23/08/2006, 14h29
  3. [Tableaux] Extraire les chiffres dans une chaîne
    Par Digiduck dans le forum Langage
    Réponses: 8
    Dernier message: 16/08/2006, 14h33
  4. Extraire des chiffres
    Par nellynew dans le forum Access
    Réponses: 4
    Dernier message: 06/06/2006, 15h56
  5. extraire 2 chiffres après virgule ?
    Par nerick dans le forum C
    Réponses: 2
    Dernier message: 13/12/2002, 17h10

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