Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
753 connectés 

  FORUM HardWare.fr
  Programmation
  C++

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1648588
nisalon_ca​je
Posté le 25-11-2007 à 17:25:27  profilanswer
 

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

mood
Publicité
Posté le 25-11-2007 à 17:25:27  profilanswer
 

n°1648593
Elmoricq
Modérateur
Posté le 25-11-2007 à 17:52:04  profilanswer
 

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
n°1648596
nisalon_ca​je
Posté le 25-11-2007 à 17:58:37  profilanswer
 

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 ?

n°1648597
KangOl
Profil : pointeur
Posté le 25-11-2007 à 17:59:22  profilanswer
 

non, de type unsigned int

n°1648599
Elmoricq
Modérateur
Posté le 25-11-2007 à 18:01:08  profilanswer
 

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.

n°1648602
nisalon_ca​je
Posté le 25-11-2007 à 18:05:07  profilanswer
 

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

n°1648605
Elmoricq
Modérateur
Posté le 25-11-2007 à 18:07:06  profilanswer
 

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])

n°1648606
nisalon_ca​je
Posté le 25-11-2007 à 18:08:23  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

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

 

Sujets relatifs
problème avec mon serv FTP[FORTRAN] Problème lecture fichier
probleme mysql + droitsProblème menu blockmenu en CSS sous IE6. A l'aide
Liste CHaine, un big probleme!!Problème de Socket
Lecteur MP3 sur site wen, petit problemeJavascript et IE7 : probleme de taille !
Un petit problème avec mes flux RSS et Google ReaderProblème d'header content-type : image/jpeg
Plus de sujets relatifs à : [C++] Problème avec l'opérateur %


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR