Format bianaire en C

julie -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour !

C'est une question toute simple, j'aimerais pouvoir affecter une variable C par une constante en binaire

genre j prenne la valeur binaire 1000100

Je sais que pour préciser que c'est en héxa on met 0x devant le nombre , en octal 0, mais en binaire ???

Merci
Julie

5 réponses

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    Euh ben c'est sur cette page qu'il parlent des masques binaires, non ? Si tu peux faire du c++, tu peux essayer un std::vector<bool>, mais c'est moins pratique qu'une vraie variable binaire...

    Ceci dit j'ai cherché une notation en 0b et j'ai rien trouvé... à ce demander si ca existe ;o))

    Sinon tu ne peux pas travailler en hexa ?
    2
    1. julie
       
      Ben oui je pourrais travailler en hexa mais bon ca me ferait quand meme plaisir de savoir comment préciser qu'une constante est binaire sans avoir à créer des structures... y'a surement moyen, c'est tout bete quand même...

      Julie
      0
      1. XtremDev Messages postés 3 Statut Membre > julie
         
        j'ai la solution...
        en fait, tu voudrais faire un truc du genre :

        int a = 0b11010101;

        qui pourrai s'écrire aussi :

        int a = 0xD5;

        ou

        int a = 213;

        mais bon ! apparement, tu tiens à utiliser le format binaire.
        voici donc 3 macro pour transformer des chaines binaires (respectivemnt 8, 16 et 32 bits).

        #define to8b( o ) ( (((#o[7] == 0x30) ? 0 : 1) << 0) | \
        (((#o[6] == 0x30) ? 0 : 1) << 1) | \
        (((#o[5] == 0x30) ? 0 : 1) << 2) | \
        (((#o[4] == 0x30) ? 0 : 1) << 3) | \
        (((#o[3] == 0x30) ? 0 : 1) << 4) | \
        (((#o[2] == 0x30) ? 0 : 1) << 5) | \
        (((#o[1] == 0x30) ? 0 : 1) << 6) | \
        (((#o[0] == 0x30) ? 0 : 1) << 7) )

        #define to16b( o )( (((#o[15] == 0x30) ? 0 : 1) << 0) | \
        (((#o[14] == 0x30) ? 0 : 1) << 1) | \
        (((#o[13] == 0x30) ? 0 : 1) << 2) | \
        (((#o[12] == 0x30) ? 0 : 1) << 3) | \
        (((#o[11] == 0x30) ? 0 : 1) << 4) | \
        (((#o[10] == 0x30) ? 0 : 1) << 5) | \
        (((#o[ 9] == 0x30) ? 0 : 1) << 6) | \
        (((#o[ 8] == 0x30) ? 0 : 1) << 7) | \
        (((#o[ 7] == 0x30) ? 0 : 1) << 8) | \
        (((#o[ 6] == 0x30) ? 0 : 1) << 9) | \
        (((#o[ 5] == 0x30) ? 0 : 1) << 10) | \
        (((#o[ 4] == 0x30) ? 0 : 1) << 11) | \
        (((#o[ 3] == 0x30) ? 0 : 1) << 12) | \
        (((#o[ 2] == 0x30) ? 0 : 1) << 13) | \
        (((#o[ 1] == 0x30) ? 0 : 1) << 14) | \
        (((#o[ 0] == 0x30) ? 0 : 1) << 15) )

        #define to32b( o )( (((#o[31] == 0x30) ? 0 : 1) << 0) | \
        (((#o[30] == 0x30) ? 0 : 1) << 1) | \
        (((#o[29] == 0x30) ? 0 : 1) << 2) | \
        (((#o[28] == 0x30) ? 0 : 1) << 3) | \
        (((#o[27] == 0x30) ? 0 : 1) << 4) | \
        (((#o[26] == 0x30) ? 0 : 1) << 5) | \
        (((#o[25] == 0x30) ? 0 : 1) << 6) | \
        (((#o[24] == 0x30) ? 0 : 1) << 7) | \
        (((#o[23] == 0x30) ? 0 : 1) << 8) | \
        (((#o[22] == 0x30) ? 0 : 1) << 9) | \
        (((#o[21] == 0x30) ? 0 : 1) << 10) | \
        (((#o[20] == 0x30) ? 0 : 1) << 11) | \
        (((#o[19] == 0x30) ? 0 : 1) << 12) | \
        (((#o[18] == 0x30) ? 0 : 1) << 13) | \
        (((#o[17] == 0x30) ? 0 : 1) << 14) | \
        (((#o[16] == 0x30) ? 0 : 1) << 15) | \
        (((#o[15] == 0x30) ? 0 : 1) << 16) | \
        (((#o[14] == 0x30) ? 0 : 1) << 17) | \
        (((#o[13] == 0x30) ? 0 : 1) << 18) | \
        (((#o[12] == 0x30) ? 0 : 1) << 19) | \
        (((#o[11] == 0x30) ? 0 : 1) << 20) | \
        (((#o[10] == 0x30) ? 0 : 1) << 21) | \
        (((#o[ 9] == 0x30) ? 0 : 1) << 22) | \
        (((#o[ 8] == 0x30) ? 0 : 1) << 23) | \
        (((#o[ 7] == 0x30) ? 0 : 1) << 24) | \
        (((#o[ 6] == 0x30) ? 0 : 1) << 25) | \
        (((#o[ 5] == 0x30) ? 0 : 1) << 26) | \
        (((#o[ 4] == 0x30) ? 0 : 1) << 27) | \
        (((#o[ 3] == 0x30) ? 0 : 1) << 28) | \
        (((#o[ 2] == 0x30) ? 0 : 1) << 29) | \
        (((#o[ 1] == 0x30) ? 0 : 1) << 30) | \
        (((#o[ 0] == 0x30) ? 0 : 1) << 31) )

        avec ça, tu peux maintenant écrire :

        int a = to8b(11010101);
        et si tu fais
        printf("a = %d", a);
        tu obtiendras à l'affichage a = 213

        Enjoy !
        0
      2. jérémy > julie
         
        Salut julie

        Je viens aux nouvelles pour savoir si tu t'en sors avec ton format binaire en langage C.
        0
  2. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    0
    1. julie
       
      salut ! je suis allé voir sur le forum que tu m'as indiqué mais nulle part est dit comment on précise qu'une constante est binaire ( si je ne suis pas aveugle ! )

      Julie
      0
      1. Kermitt31 Messages postés 3679 Date d'inscription   Statut Contributeur Dernière intervention   499 > julie
         
        Bonjour,
        Tu as essayé avec 0b ??
        0
      2. julie > Kermitt31 Messages postés 3679 Date d'inscription   Statut Contributeur Dernière intervention  
         
        oui, bien tenté mais ca ne marche pas...

        quant aux réponses des autres, leurs solutions ne sont pas vraiment adaptées, il faudrait que ce soit aussi simple que la proposition de Kermitt31...

        Alors Kermitt31 d'autres idées ?

        Julie
        0
  3. kastouninho
     
    Salut,

    typedef union myUnion{
    typedef struct myStruct{
    unsigned var1:1; //nombre de bits
    unsigned var2:1;
    unsigned var3:1;
    unsigned var4:1;
    unsigned var5:1;
    unsigned var6:1;
    unsigned var7:1;
    unsigned var8:1;
    }struct1;
    unsigned char octet;
    } union1;

    //tu definis bit à bit ta variable octet
    union1.var1 = 0;
    union1.var2 = 1;
    union1.var3 = 0;
    union1.var4 = 1;
    union1.var5 = 1;
    union1.var6 = 1;
    union1.var7 = 0;
    union1.var8 = 0;

    //union1.octet contient 01011100
    0
  4. kastouninho
     
    erreur:

    c'est struct1.var1
    struct1.var2 ...
    0
    1. kastounhino
       
      union1.struct1.var1 ...
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    Pas con le shift de bit (<<)... Mais il me semble qu'avec juste des masques ( &, |, ... on peut s'en sortir...)
    0