Rechercher : dans
Par :

Format bianaire en C

Dernière réponse le 11 jui 2005 à 00:53:56 julie, le 6 jui 2005 à 13:22:41 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « format bianaire en C » dans :
Langage C - Les types de données VoirLes types de données Les données manipulées en langage C sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître l'occupation mémoire (le...
Servlets - Gestion des formulaires VoirIntroduction aux formulaires Les servlets rendent très simple la récupération de données envoyées par l'intermédiaire de formulaires HTML, c'est-à-dire une interface graphique permettant à l'utilisateur de saisir des données. Grâce à la balise...

1

mamiemando, le 7 jui 2005 à 02:30:18
Répondre à mamiemando

2

julie, le 7 jui 2005 à 09:32:44

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

Répondre à julie

6

Kermitt31, le 7 jui 2005 à 10:33:56
  • +1

Bonjour,
Tu as essayé avec 0b ?? Proverbe Lapon:Girafe au pôl' Nord,
Eté de la mort.

Répondre à Kermitt31

7

julie, le 7 jui 2005 à 17:59:41

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

Répondre à julie

3

kastouninho, le 7 jui 2005 à 09:54:45

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

Répondre à kastouninho

4

kastouninho, le 7 jui 2005 à 09:56:00

Erreur:

c'est struct1.var1
struct1.var2 ...

Répondre à kastouninho

5

kastounhino, le 7 jui 2005 à 09:59:06

Union1.struct1.var1 ...

Répondre à kastounhino

8

mamiemando, le 7 jui 2005 à 23:13:30
  • +1

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 ?

Répondre à mamiemando

9

julie, le 8 jui 2005 à 09:16:26

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

Répondre à julie

10

XtremDev, le 8 jui 2005 à 10:15:41
  • +1

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 !

Répondre à XtremDev

11

jérémy, le 8 jui 2005 à 16:21:32

Salut julie

Je viens aux nouvelles pour savoir si tu t'en sors avec ton format binaire en langage C.

Répondre à jérémy

12

 mamiemando, le 11 jui 2005 à 00:53:56
  • +1

Pas con le shift de bit (<<)... Mais il me semble qu'avec juste des masques ( &, |, ... on peut s'en sortir...)

Répondre à mamiemando