Format bianaire en C

julie -  
mamiemando Messages postés 33777 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
A voir également:

5 réponses

mamiemando Messages postés 33777 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 
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
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
XtremDev Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   > 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
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
mamiemando Messages postés 33777 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 
0
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
Kermitt31 Messages postés 3679 Date d'inscription   Statut Contributeur Dernière intervention   495 > julie
 
Bonjour,
Tu as essayé avec 0b ??
0
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
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
kastouninho
 
erreur:

c'est struct1.var1
struct1.var2 ...
0
kastounhino
 
union1.struct1.var1 ...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

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