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