caster/tronquer float en int
Bonjour à tous,
Je dois developper deux petites fonctions en C compilé par diab pour aller sur un MPC555.
Mise en situation:
Le logiciel sur lequel je travail ecrit des blocks (ie 0 to 5023) dans une memoire et doit garder une trace des blocks ecrit. A chaque fois qu'un block est ecrit, on appel une fonction qui s'occupe de marquer ces blocks comme ecrit. Il faut aussi etre capable de retourner, à l'aide d'une autre fonction, si un block passé en parametre est ecrit.
Premier choix on crée un tableau, contenant des variable de 32 bits, en supposant que ca ameliore par rapport a des variables de 8, 16 ou 64 bits
Code:
1 2 3
|
#define size (5024u)
static unsigned int history[size/32u] |
On a donc cette fonction prenant forcement un unsigned short en entrée
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
void setblock(unsigned short block_id)
{
unsigned int mask;
unsigned int index;
//on cree notre mask pour aller ecrire dans le tableau
mask = (unsigned int)(1u<<(block_id%32u));
//on determine a quelle position ecrire
index = (unsigned int)(block_id/32u);
//et on vient updater le tableau
history[index] |= mask;
} |
Premiere question, etes vous d'accord avec ce code d'un point de vue des performance ?
Aussi je ne veux laisser aucun cast implicite.
Deuxieme question, d'apres ce que je sais, la version de diab que j'utilise ne fera pas le castage du float comme je l'attend.
int i = (int)(1.7) --> 2 et non 1.
Je voudrais donc contourner ce probleme, mais de facon a ce que le resultat soit comme attendu et ce, pour difference type de compilateur.
ie: sur gcc int i = (int)(1.7) --> 1.
Auriez vous une suggestion ?
Merci beaucoup pour votre aide et vos suggestions