Probléme sur le modulo '%' en C

Résolu
Mareck666 Messages postés 56 Date d'inscription lundi 6 février 2006 Statut Membre Dernière intervention 30 avril 2013 - 1 nov. 2007 à 18:32
Mareck666 Messages postés 56 Date d'inscription lundi 6 février 2006 Statut Membre Dernière intervention 30 avril 2013 - 2 nov. 2007 à 15:26
    Bonjour amis codeurs, codeuses, ... voila en surfant sur le net j'ai découvert un code sources dans une section de devellopez.com qui concerne les checksums, mai voila il y a quelquechose que je ne comprend pas, a quoi sert le modulo 256 ici, je sait que le modulo c'est le reste d'une divison exemple 12 % 6 = 0 mais voila a quoi il sert ici est pourquoi quand en language C on fait une opération du style (20 % 256) le resultat est 20 alors que le reste de  20/256 fait tous sauf 20 (il fait  0,078... donc ce chers language C devrait me dire 0 au lieu de 20), ...bref la méga grosse prise de tête, sa serait vrément sympa de m'aider en m'expliquant ce mystére autour du modulo...

Voici le code src employant le modulo 256:
<<
typedefunsignedint TU_int32; // Mot de 32 bit non signé
typedefunsignedshortint TU_int16; // Mot de 16 bits non signé
typedefunsignedchar TU_int8; // Mot de 8 Bits non signé

TU_int8 __fastcall CalcSomme(AnsiString Message)
{
TU_int8 iuResult = 0; // Resultat sur 8 bits
//--- Calcul de la somme, le premier caractère est en position 1
for (int i = 1; i <= Message.Length(); i++)
iuResult += Message[i];
//--- Modulo Valeur Maxi sur 8 Bits
return (iuResult %= 0xFF);
}
>>

Merci d'avance pour la réponce ^^
A voir également:

5 réponses

luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
1 nov. 2007 à 20:42
Bas le code fait la somme des codes ascii de tes caractères. Seulement il est un peu stupide ce code source, car la somme est stockée sur un entier 8 bits non signé (cad < 256). Donc l'opération modulo ne sert a rien.
3
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
1 nov. 2007 à 18:39
"alors que le reste de  20/256 fait tous sauf 20".
=> Bas si, c'est 20 le reste:
"20 = 0*256 + 20"
0
Mareck666 Messages postés 56 Date d'inscription lundi 6 février 2006 Statut Membre Dernière intervention 30 avril 2013
1 nov. 2007 à 19:38
a ok donc on peut avoir un résultat de division null en l'occurence ici donc on a : 20/256 = 0 donc 20%256 = 20, ok ok je croit que je doit avoir quelques lacunes en math moi... m'enfin sa serait cool de m'éclairer sur le code src quand même



merci luhtor pour ta réponce
0
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
1 nov. 2007 à 20:29
a modulo b c'est le plus petit entier m (positif, on va pas se casser la tête) qui vérifie :
a=q*b+m;

a,b,q entiers
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mareck666 Messages postés 56 Date d'inscription lundi 6 février 2006 Statut Membre Dernière intervention 30 avril 2013
2 nov. 2007 à 15:26
ah merci un grand soulagement, sa fesait au moin six longs mois d'affilé que ce code me filé d'atroces migraines a chaque fois que je tombé dessus sur developpez.com, et oui moi quand je comprend pas quelque chose sa me met hors de moi .... et faut que je comprenne sinon sa va mal, mai maintenant c'est de l'histoire ancienne



merci a vous 2
0
Rejoignez-nous