Type binaire de taille quelconque - C++ - Programmation
Marsh Posté le 30-01-2003 à 15:39:13
LetoII a écrit : T'as regardé du côté des champ de bits? |
j'aurai bien aimé faire une structure comme ca :
Code :
|
mais gcc est pas d'accord
Marsh Posté le 30-01-2003 à 18:01:43
xav14 a écrit : Je suis en train de faire un simulateur de SIMD avec un processeur de controle et plusieurs processeurs d'execution et il faudrait que j'ai un registre de masque contenant autant de bits que de processeurs d'execution (ca peut varier de 8 a beaucoup +, genre 1024 ou 2048). et je n'arrive pas a trouver une solution facilement implementable. les operations principales sont des initialisations en brut (genre tous les bits a 0) et des copies entre ces structures. Mais l'implementation des et/ou/non/ouex devrait etre facile a coder. |
si t'es en C++ tu peux regarder du coté des Bitset.
Marsh Posté le 31-01-2003 à 04:16:26
En C++:
Code :
|
En C:
Code :
|
Utilisation:
Code :
|
Ou alors bien bourrin: 1 char par bit .
Marsh Posté le 02-02-2003 à 13:48:44
La solution c++ est bien courte mais j'essaye de le faire en ansi C + posix.
La solution C est bien minimale comme j'aime (a part la macro instruction ) je vais la recuperer en y mettant ma sauce
merci
Marsh Posté le 02-02-2003 à 14:01:17
attention: bitset n'est peut etre pas approprié du fait qu'il est un pseudo container, il peut y avoir des limitations. bien qu'un bitset soit de taille fixe et donc certainement plus rapide, il ne faut pas non plus éliminer d'office std::vector<bool> qui est souvent spécialisé (gain de place) et propose l'interface d'un vector.
Musaran > je croyais que tu arretais les macros cette année? quid des fonctions inline en C99?
Marsh Posté le 02-02-2003 à 16:33:32
++Taz a écrit : attention: bitset n'est peut etre pas approprié du fait qu'il est un pseudo container, il peut y avoir des limitations. bien qu'un bitset soit de taille fixe et donc certainement plus rapide, il ne faut pas non plus éliminer d'office std::vector<bool> qui est souvent spécialisé (gain de place) et propose l'interface d'un vector. |
arf steu chinois
d'ailleurs, ptite question en passant, ya une norme pour le C++ ??
Marsh Posté le 02-02-2003 à 16:34:58
iso
edit: tu comprends pas quoi?
Marsh Posté le 02-02-2003 à 16:48:06
++Taz a écrit : iso |
attention: bitset n'est peut etre pas approprié du fait qu'il est un pseudo container, il peut y avoir des limitations. bien qu'un bitset soit de taille fixe et donc certainement plus rapide, il ne faut pas non plus éliminer d'office std::vector<bool> qui est souvent spécialisé (gain de place) et propose l'interface d'un vector.
mais bon, j'ai jamais fais de C++ non plus
Marsh Posté le 02-02-2003 à 16:56:26
pseudo container: std::vector, std::list, etc, sont des conteneurs (collection ou ~container), c'est à dire qu'ils fournissent des iterator, sont des sequences modifiables de taille variable et sont des template de type, etc std::bitset (tout comme std::string) ne reponds pas à ces criteres (taille fixe, pas d'iterateurs, etc)
std::vector<bool> ben un vecteur de booléens, c'est une interprétation d'une sequence de bits
interfacevoir conteneur: ils fournissent les meme methodes et fonctonnalités qui permettent de manipuler un conteneur stl de la meme manière sans se soucier de son type (ex: la fonction membre push_back, ou begin())
vector voir plus haut
c'est vrai que t'y connais rien....
Marsh Posté le 02-02-2003 à 16:58:41
xav14 a écrit : |
les pseudo conteneur (tableaux intégrés, bitset, valarray et bitset) contiennent des elts, donc ce sont des conteneurs. Mais ils n'ont pas certaines fonctionnalités qui font que tu ne peux pas les interchanger avec d'autres, alors que si tu utilises un vector, une list, un map, tu l'utilises de la même manière.
le std::vector<bool> est souvent une classe spécialisée pour l'optimisation (notamment au niveau mémoire et accés)
elle propose l'interface d'un vector: tu l'utilises exactement comme un vector normal
oups grillé
Marsh Posté le 02-02-2003 à 17:23:33
++Taz a écrit : |
j'ai jamais dit le contraire
et pis la poo j'accroche pas du tout
je me suis tapé du java pendant 2 semestres et j'accroche pas
je prefere ada ou c
Marsh Posté le 03-02-2003 à 09:38:09
xav14 a écrit : La solution c++ est bien courte |
Comme souvent.
Mais le source de <bitset> est bien touffu.
++Taz a écrit : il ne faut pas non plus éliminer d'office std::vector<bool> qui est souvent spécialisé (gain de place) et propose l'interface d'un vector. |
C'est effectivement permis par la norme C++98, et c'est reconnu comme une grosse bourde.
Ça fait foirer plein de mécanismes génériques, au point qu'on a cherché un moyen de "désactiver" cette spécialisation.
Citation : Musaran > je croyais que tu arretais les macros cette année? quid des fonctions inline en C99? |
Je peux pas... j'ai besoin de NINT en constante de compilation pure pour dimensionner le tableau.
Il y a clairement une lacune à C et C++ à ce niveau.
Il me semble qu'il y a une astuce plus simple pour la division entière arrondie vers le haut (DIVUP), mais je retrouves pas.
Marsh Posté le 30-01-2003 à 14:24:22
Je suis en train de faire un simulateur de SIMD avec un processeur de controle et plusieurs processeurs d'execution et il faudrait que j'ai un registre de masque contenant autant de bits que de processeurs d'execution (ca peut varier de 8 a beaucoup +, genre 1024 ou 2048). et je n'arrive pas a trouver une solution facilement implementable. les operations principales sont des initialisations en brut (genre tous les bits a 0) et des copies entre ces structures. Mais l'implementation des et/ou/non/ouex devrait etre facile a coder.
Merci