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

MFC Discussion :

travailler en binaire


Sujet :

MFC

  1. #1
    Membre averti
    Inscrit en
    Janvier 2005
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 26
    Par défaut travailler en binaire
    Bonjour,
    j'ai un nombre (ex: 548 362 457) qui est codé sur 32 bits. Ma valeur maxi étant 999 999 999 il me reste 2 bits de disponible, je voudrais pouvoir lire ces deux bits et changer leur valeur.

    Est-il possible de faire une convertion en bit et est-il possible d'agir sur des bits spécifiques? si oui comment?

    Merci, Vins

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    oui c'est possible, tu fais un masque binaire.
    ex : un "et logique"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    x = mavaleur & 00111111111111111111111111111111
    te mets les deux bits de gauche à zéro

  3. #3
    Membre averti
    Inscrit en
    Janvier 2005
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 26
    Par défaut
    ok, mais on déclare comment un masque binaire??

  4. #4
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    et bien soit comme je l'ai fait, soit avec une variable, soit avec une constante, etc ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int x = 55; // en binaire : 110111
    	int y;
    	int masque = 15; // en binaire : 001111
    	y = x & masque;
    	std::cout << y; // affiche 7 (en binaire 000111)

  5. #5
    tut
    tut est déconnecté
    Membre éclairé
    Avatar de tut
    Inscrit en
    Juillet 2002
    Messages
    373
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 373
    Par défaut
    peut-être que la classe bitset<> de la STL pourra t'être utile :
    http://www.sgi.com/tech/stl/bitset.html

  6. #6
    Membre averti
    Inscrit en
    Janvier 2005
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 26
    Par défaut
    Bizar, ton code fonctionne alors que celui-la non!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	int number = 776999776;
    	int number_bin = 1073741824;
     
    	int n = number & number_bin;
    	std::cout << number << std::endl;
    	std::cout << n << std::endl;
    de plus comment je peux faire pour les remettre à zéro mes 2 bits et on peut les tester?

  7. #7
    tut
    tut est déconnecté
    Membre éclairé
    Avatar de tut
    Inscrit en
    Juillet 2002
    Messages
    373
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 373
    Par défaut
    tu n'aurais pas un dépassement de capacité ? j'ai pas vérifié, mais essaye de remplacer tes "int" par "unsigned int".
    ou d'utiliser la classe bitset de la STL qui est faite pour ça. Sur le lien que je t'ai filé il y a des exemples.

  8. #8
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    regarde, t'as un zéro de trop
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      101110010100000001001101100000 = 776999776
     1000000000000000000000000000000 = 1073741824
    donc, un et binaire, te mets tout à zéro

  9. #9
    Membre averti
    Inscrit en
    Janvier 2005
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 26
    Par défaut
    dsl, je fais peut etre mon boulet mais je te comprend plus la!!!
    j'ai du me perdre en route.

  10. #10
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    et bien, lorsque tu fais un ET logique, voici la table :
    1 ET 1 = 1
    1 ET 0 = 0
    0 ET 1 = 0
    0 ET 0 = 0
    donc, si tu fais un masque comme le tiens, tous les bits qui sont au dessus d'un zéro vont passer à zéro
    seul celui qui est au dessus de 1 restera à 1 (en l'occurence, il s'agit d'un zéro dans l'exemple).
    Si tu veux mettre tes deux bits de gauche à zéro, et ne pas toucher au reste, il faut faire comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    101110010100000001001101100000 = 776999776
    001111111111111111111111111111 = 268435455

  11. #11
    Membre averti
    Inscrit en
    Janvier 2005
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 26
    Par défaut
    ça ok mais le prb c'est que ça
    101110010100000001001101100000 = 776999776 ça équivbaut a ça:
    00101110010100000001001101100000 = 776999776.
    et moi c'est les "00" de gauche que je veu passer a un ou non.
    tu vois?

  12. #12
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    et bien tu changes le masque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      101110010100000001001101100000 = 776999776
    00111111111111111111111111111111 = 1073741823
    Ce masque positionne les deux bits de gauche à zéro (pour 776999776, ils le sont déjà, donc le résultat est le meme )

  13. #13
    Membre averti
    Inscrit en
    Janvier 2005
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 26
    Par défaut
    Le truc c'est que ça change pas ma valeur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    101110010100000001001101100000 = 776999776
    01111111111111111111111111111111 = 2147483647
    776999776 & 2147483647 m'affiche toujours 776999776 ??

  14. #14
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    Citation Envoyé par Vins83
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    00101110010100000001001101100000 = 776999776
    01111111111111111111111111111111 = 2147483647
    regarde bien, c'est normal.
    dans les deux bits à gauches, tu fais un 0 ET 0 => 0 et un 1 ET 0 => 0.
    Donc, c'est normal que ca ne change rien.

    Comment voudrais-tu que ca change ?

  15. #15
    Membre averti
    Inscrit en
    Janvier 2005
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 26
    Par défaut
    justement je veux que ça change je veux les passé a un (l'un ou l'autre)!!!

  16. #16
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    dans ce cas, il faut faire un OU logique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	unsigned int x = 776999776; // en binaire : 101110010100000001001101100000
    	unsigned int y;
    	unsigned int masque = 3221225472; // en binaire : 11000000000000000000000000000000
    	y = x | masque;

  17. #17
    Membre averti
    Inscrit en
    Janvier 2005
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 26
    Par défaut
    c'est bon ça marche si je le fais avec un OU "|"

  18. #18
    Membre averti
    Inscrit en
    Janvier 2005
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 26
    Par défaut
    lol trouver en meme temps.
    C'est cool je vais pouvoir terminer ce prog.
    Merci

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

Discussions similaires

  1. Conversion binaire -> ASCII
    Par will13013 dans le forum C
    Réponses: 8
    Dernier message: 08/01/2003, 04h12
  2. Réponses: 5
    Dernier message: 11/12/2002, 12h31
  3. communication fichier binaire fichier txt
    Par micdie dans le forum C
    Réponses: 3
    Dernier message: 05/12/2002, 00h19
  4. fichier binaire ou texte
    Par soussou dans le forum C++Builder
    Réponses: 4
    Dernier message: 14/06/2002, 13h39

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