bonsoir,
je viens tout juste de commencer le C.
j'essaye de fair un petit programme qui fait une multiplication de deux nombres de taille inférieur a 32bits. Pour la multiplication j'utilise l'algorithme de la division Russe (mais l'a n'est pas le problème).

Je décalle une variable de 64 bits (long long int) de 1 et quand je dépasse les 32bits il y a un truc qui foire !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
28
29
30
31
32
 
int main () {
unsigned int a , t1 ,t2 ;
unsigned long long int  b , res;
 int unsigned *c=malloc(sizeof(int)*3) ; c[0]=0 ; c[1]=0 ; c[2]=0 ;
 
 
printf("\nEntrer vos deux nombres séparés d'un espace  : ") ;
scanf("%u%u" , &t1 , &t2 ) ;
 
a=t1 ; b=t2 ;
 
/* a=13 ; b=5 ; */
/* a=456789 ; b = 456123 ; */
 
 
printf("%u*%u==\n" , a , b) ;
 
do {
t1 = b>>32 ; t2 = b&0x0FFFFFFFF ;
printf("%u\t| %u%u"  , a , t1,t2) ;
 
if (a%2==1){printf(" * ");
res=c[0]+b ;  if (res>>32==0){c[0]=res ; }
else{c[1]=c[1]+(res>>32) ; c[0]=c[0] + (res & 0x0FFFFFFFF) ; } } printf("\n") ;
a=a>>1 ;
b=b<<1 ;
}while (a>0) ;
 
printf("\t%u%u\n" ,c[1],c[0] ) ;
return 0 ;
}/* main */
avec les nombres 456789 et 456123 çà donne cette liste :

Entrer vos deux nombres séparés d'un espace : 456789 456123
456789*456123==
456789 | 0456123 *
228394 | 0912246
114197 | 01824492 *
57098 | 03648984
28549 | 07297968 *
14274 | 014595936
7137 | 029191872 *
3568 | 058383744
1784 | 0116767488
892 | 0233534976
446 | 0467069952
223 | 0934139904 *
111 | 01868279808 *
55 | 03736559616 *
27 | 13178151936 * <=première erreure il est attendu 7473119232 au lieux de 13178151936
13 | 32061336576 *
6 | 64122673152
3 | 133950379008 *
1 | 273605790720 *
472606621408 <= résultat obtenu
208351969047 <= résultat attendu

Cordialement
trax