Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1780 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C] Comment définir un type de donnée binaire de taille variable ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Comment définir un type de donnée binaire de taille variable ?

n°1098003
ceyquem
E falso sequitur quodlibet
Posté le 26-05-2005 à 14:13:36  profilanswer
 

Bonjour,
 
je voudrais définir un type de donnes binaires de taille variable  
(tailles exemples : 17 bits, 12 bits, 23 bits, ...) qui n'est pas
forcément de la taille de char (8 bits) ou int (32 bits).
 
l'idée est qu'en faisant des opérations sur ces nombres
je puisse mettre en évidence le bruit de calcul. en effet,
si je stocke un nombre de 12 bits dans un int de 32 bits,
j'aurai trop de précision lors du calcul.
 
Une idée ?
 
merci :)

mood
Publicité
Posté le 26-05-2005 à 14:13:36  profilanswer
 

n°1098027
skelter
Posté le 26-05-2005 à 14:20:02  profilanswer
 

char fait CHAR_BIT bits et int fait sizeof(int) * CHAR_BIT bits, si tu veux un truc fixe regarde dans stdint.h (c99)
 
c'est quoi le bruit de calcul, l'overflow ?

n°1098048
ceyquem
E falso sequitur quodlibet
Posté le 26-05-2005 à 14:26:20  profilanswer
 

le bruit de calcul peut provenir de l'overflow et aussi des arrondis dans certaines opérations (en fait les nombres que je manipule ont une partie entière et une décimale, codées en binaire).
 
c'est le même genre de problème que le bruit de quantification lors de la conversion analogique vers numérique : il dépend du pas de quantif et ici le bruit de calcul dépend de la précision des variables


Message édité par ceyquem le 26-05-2005 à 14:28:31
n°1098096
skelter
Posté le 26-05-2005 à 14:39:43  profilanswer
 
n°1098132
ceyquem
E falso sequitur quodlibet
Posté le 26-05-2005 à 14:48:02  profilanswer
 

hum ça n'a pas l'air très pratique ce truc, ça n'est pas portable, dépendant du compilateur et en plus ils n'ont pas d'adresse :(
 
pas d'autre idée ??

n°1098151
skelter
Posté le 26-05-2005 à 14:50:53  profilanswer
 

alors faudra le gerer toi meme ou peut etre que ca existe deja une bibliotheque qui le fait, genre gmp ?

n°1098253
Emmanuel D​elahaye
C is a sharp tool
Posté le 26-05-2005 à 15:40:17  profilanswer
 

ceyquem a écrit :

hum ça n'a pas l'air très pratique ce truc, ça n'est pas portable, dépendant du compilateur et en plus ils n'ont pas d'adresse :(


  • Pas pratique ? Pas d'accord, et en plus et ca correspond exactement à ce que tu veux faire. Il ne faut pas baisser les bras aussi rapidement...


struct data
{
   unsigned a:17;
   unsigned b:12;
   unsigned c:23;
};
 
{
   struct data x;
 
   x.a = 1234;
}


etc.
 
rien de compliqué.
 
Le type d'un champ de bit est int ou unsigned int. Le C garanti au moins 16 bits pour unsigned int. Sauf antiquité (x-86 mode réel, par exemple) il y a de fortes chances que ta machine supporte des int de 32 bits.
 

  • Pas d'adresse, OK. C'est grave ? On peut toujours passer l'adresse de la structure.


  • Pas portable ? As-tu l'intention d'échanger des données entre des machines en utilisant les champs de bits ?



Message édité par Emmanuel Delahaye le 26-05-2005 à 15:45:24

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1098577
bisounours
Posté le 26-05-2005 à 18:55:58  profilanswer
 

Salut!
 
Normalement les "bitfields" sont portables dans la mesure où l'on réserve des bits d'une variable. Ce qui n'est pas portable dit "implementation defined" ce sont les "packed bits" c'est à dire le compactage des bits pour ne pas laisser de trous dans la suite de bits que constitue une structure.


Message édité par bisounours le 26-05-2005 à 18:57:33
n°1101565
TotalRecal​l
Posté le 30-05-2005 à 13:19:42  profilanswer
 

Si toutes tes variables font moins de 32 bits de long, les bitfields sont une excellente solution. Tu peux aussi utiliser un systeme de masques (&, |) et de décalages binaires (>> << ) mais c'est bien s'emmerder pour arriver au même résultat.
Bon évidemment avec les bitfiels si tu commences à faire des énormes tableaux v'la la perte d'espace mémoire... (une structure = 32 bits, donc c'est bête si t'en utilise 1/4 à chaque fois...)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C] Comment définir un type de donnée binaire de taille variable ?

 

Sujets relatifs
[VBA Excel macro]réutilisation de variable + comparaisons autodefinir un tableau en VB6
Connexion à une base de donnée[javascript]Définir variable
[VB.NET] Pb de variable[C] Nom de variable inconnu lors de la compilation
Undefined variable incessante...[Makefile] Affecter le `stdout' d'une commande shell a une variable
Comment optimiser la taille des pages web en fonction de la resolution 
Plus de sujets relatifs à : [C] Comment définir un type de donnée binaire de taille variable ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR