[C++] Problème avec l'opérateur %

Problème avec l'opérateur % [C++] - C++ - Programmation

Marsh Posté le 25-11-2007 à 17:25:27    

Bonjour je me creuse la tête sur le problème suivant auquel je ne parviens pas à trouver de solution :
 
j'ai  

Code :
  1. cout<<(-1)%(20)<<endl;
  2. cout<<ensembles[obstacle].size()<<endl; // ensembles est un vecteur de vecteur, obstacle est un int
  3. cout<<(-1)%(ensembles[obstacle].size())<<endl;


 
Cela m'affiche le résultat suivant :  
-1
20
15
 
Je ne comprends pas pourquoi j'obtiens 15 et non pas -1 à la fin
 
voila voila merci d'avance de votre aide
 
nc

Reply

Marsh Posté le 25-11-2007 à 17:25:27   

Reply

Marsh Posté le 25-11-2007 à 17:52:04    

size() est visiblement de type unsigned donc il va chercher à te retourner un modulo compris entre 0 et 20 :

Code :
  1. #include <iostream>
  2.  
  3. int main (void)
  4. {
  5.    std::cout << -1 % 20 << std::endl;
  6.    std::cout << -1 % (unsigned)20 << std::endl;
  7.    return 0;
  8. }
 

$ g++ taiste.cc
$ a.out
-1
15
$

 

Cast ton 20 en signé :

Code :
  1. #include <iostream>
  2.  
  3. int main (void)
  4. {
  5.    unsigned size = 20;
  6.    std::cout << (-1) % (signed)size << std::endl;
  7.    return 0;
  8. }
 

$ g++ taiste.cc
$ a.out
-1
$


Message édité par Elmoricq le 25-11-2007 à 17:57:26
Reply

Marsh Posté le 25-11-2007 à 17:58:37    

je n'ai pas compris votre deuxième bloc ce qu'il signifie.
 
et je viens de m'apercevoir qu'en faisant cout<<(-1)%int(ensembles[obstacle].size())<<endl; on obtient bien le résultat voulu.
 
Pourtant ensembles[obstacle].size() est bien de type int n'est ce pas ?

Reply

Marsh Posté le 25-11-2007 à 17:59:22    

non, de type unsigned int

Reply

Marsh Posté le 25-11-2007 à 18:01:08    

nisalon_caje a écrit :

je n'ai pas compris votre deuxième bloc ce qu'il signifie.


 
Le deuxième bloc montre juste la compilation + exécution sous unixoïde.

Reply

Marsh Posté le 25-11-2007 à 18:05:07    

Elmoricq -> merci pour ta réponse
 
KangOl -> cela peut changer quelque chose ici ou cela provient d'autre chose ?

Reply

Marsh Posté le 25-11-2007 à 18:07:06    

nisalon_caje a écrit :

KangOl -> cela peut changer quelque chose ici ou cela provient d'autre chose ?


 
Qu'est-ce qui peut changer quelque chose, je ne te suis pas ?
(s'il s'agit du type retourné par size(), il semble bien que oui, cela change parfois quelque chose [:dawao])

Reply

Marsh Posté le 25-11-2007 à 18:08:23    

ben ici est ce que le fait que le .size() est un unsigned int plutot qu'un int explique le résultat faux

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed