et l'affichage doit se faire avec "%u" et non "%d"...Code:unsigned index = (unsigned)(hashcode % HASH_TAILLE)
Version imprimable
euh .. désolé mais ça n'a pas l'air de fonctionner tel que tu propose emmanuel si j'ai ce bout de code :
où hashcode vaut 18446744072274528121 (ouf!)Code:
1
2
3 unsigned index = (unsigned)(hash_code%HASH_TAILLE); printf("index : %u\n",index);
et HASH_TAILLE = 1000
index devrait valoir 121
(modulo avec 1000 revient à ne conserver que les 3 derniers chiffres
du code , qu'on prend ensuite en index de tableau)
or j'obtients : 4294966801 ???
bizarre ...
Ben montre ton code, parce que :
donne :Code:
1
2
3
4
5
6
7
8
9
10
11
12 #include <stdio.h> int main (void) { unsigned __int64 hash_code = 18446744072274528121ULL; unsigned HASH_TAILLE = 1000; unsigned index = (unsigned) (hash_code % HASH_TAILLE); printf ("index : %u\n", index); return 0; }
avec MinGW32...Code:
1
2
3
4 index : 121 Press ENTER to continue.
bonjour et merci pour ta demonstration emmanuel!
Bon , je ne peux pas montrer tout le code .. c'est un jeu d'échecs alors ...
Mais en fait je fais comme ça :
Et ... je n'obtient pas 121 ... ? mais je viens de voir que tu as mis hash_taille en unsigned , moi c'est un define ... ? à cause de ça surement...Code:
1
2
3
4
5
6
7
8
9
10 typedef struct ull __int64; #define HASH_TAILLE 1000 /*taille de la hash table*/ #define MAX_COUPS 500 /*nbre max de coups d'une partie*/ ull hash_code[MAX_COUPS+1]; /*hash code pour chaque coup joué*/ /*dans la fonction qui récupère l'index*/ unsigned index = (unsigned) (hash_code[nb_coups] % HASH_TAILLE); printf("index : %u\n",index);
merci quand même ;)
edit :
bon grace a toi emmanuel j'ai trouvé une solution :
et là j'obtient le fameux 121 , cool merci encore !!Code:
1
2
3
4
5
6
7
8
9
10
11 typedef struct ull __int64; #define HASH_TAILLE 1000 /*taille de la hash table*/ #define MAX_COUPS 500 /*nbre max de coups d'une partie*/ ull hash_code[MAX_COUPS+1]; /*hash code pour chaque coup joué*/ /*dans la fonction qui récupère l'index*/ unsigned ull hash = hash_code[nb_coups]; unsigned index = (unsigned) (hash % HASH_TAILLE); printf("index : %u\n",index);
dois je mettre résolu ? ou atendre que tu lises manu ? ;)
Attention, ta définition de ull est.. fantaisiste...
Ca ne fonctionne pas chez moi. En fait, pour que le % fonctionne correctement, il faut que les 2 opérandes soient de type ull :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 #include <stdio.h> typedef __int64 ull; #define HASH_TAILLE 1000ull /*taille de la hash table */ #define MAX_COUPS 2 /*nbre max de coups d'une partie */ int main (void) { ull hash_code[MAX_COUPS + 1]; /*hash code pour chaque coup joué */ int nb_coups = 1; hash_code[nb_coups] = 18446744072274528121ULL; /*dans la fonction qui récupère l'index*/ { ull hash = hash_code[nb_coups]; printf (" hash : %I64u\n", hash); printf (" hash MOD HASH_TAILLE: %I64u\n", hash % HASH_TAILLE); { unsigned index = (unsigned) (hash % HASH_TAILLE); printf ("index : %u\n", index); } } return 0; }
Maintenant, c'est OK.Code:
1
2
3
4
5
6 hash : 18446744072274528121 hash MOD HASH_TAILLE: 121 index : 121 Press ENTER to continue.
Sous visual 2008 pas de problème avec ce code :
mais je ne sais pas si sous mingw ça passe : à voir.Code:
1
2
3
4
5
6
7
8
9
10
11 #include <stdio.h> #include <limits.h> int main (void) { unsigned long long var1 = ULLONG_MAX; unsigned __int64 var2 = ULLONG_MAX; __int64 var3 = LLONG_MAX; printf ("%llu %llu %lld\n", var1, var2, var3); return 0; }
bonsoir!
oui ... c'est sur emmanuel tu as raison : loufoque la definition de ull ... :mouarf:
je devais avoir bien la tête ailleurs;)
sinon c'est sur , bien expliqué c'est plus facile ! ton code marche et j'ai capté maintenant , merci à tous!
a bientot
dany