IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

savoir si un nombre est pair ou non


Sujet :

C++

  1. #1
    Membre �clair�
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    315
    D�tails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2003
    Messages : 315
    Par d�faut savoir si un nombre est pair ou non
    Bonjour tout le monde, j'aimerais savoir si il existe une fonction permmettant de savoir si un chiffre est pair ou non.
    j'ai trouv� ceci:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    if(chiffre% 2 == 0) {
       // ici c'est pair
    } 
    else {
       // ici c'est impair
    }
    mais si vous pensez qu'il y a mieux, svp faites moi signe
    merci

  2. #2
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    if( nombreEntier & 1 )
      {
      //Impair
      }
    else
      {
      //Pair
      }
    (Attention par contre, �a ne marche qu'avec des entiers, pas des flottants. De toute fa�on, peut-on dire d'un nombre � virgule flottante qu'il est pair ou impair ? )
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre chevronn�
    Avatar de bigquick
    Profil pro
    Inscrit en
    Ao�t 2002
    Messages
    356
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2002
    Messages : 356
    Par d�faut
    Il n'y a pas de fonction qui fait �a � ma connaissance.
    Ta m�thode marche tr�s bien, sinon tu as aussi
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    bool estPair(const int i)
    {
       return ! (i&1);  //  le ET binaire entre num et 0x00000001 retourne 1 si le nombre est impair
    //   return  (i%2==0);   // la solution avec le modulo
    }
    qui est peut-�tre un poil plus rapide, mais honn�tement � ce niveau l� ca ne change pas grand chose (si il y a bien une diff�rence)...

    edit: bah �a m'apprendra � faire autre chose pendant que je r�ponds, j'arrive trop tard du coup

  4. #4
    Membre exp�riment�
    Profil pro
    Inscrit en
    Ao�t 2003
    Messages
    247
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 247
    Par d�faut
    Citation Envoy� par bigquick
    qui est peut-�tre un poil plus rapide, mais honn�tement � ce niveau l� ca ne change pas grand chose
    Un compilateur n'est pas une br�le.
    Si le compilateur �tait effectivement une br�le, la diff�rence serait effectivement importante (rapport d'un facteur 5, voire 10, sur x86).

  5. #5
    Membre chevronn�
    Avatar de bigquick
    Profil pro
    Inscrit en
    Ao�t 2002
    Messages
    356
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2002
    Messages : 356
    Par d�faut
    D�sol� d'avoir froiss� les amis des compilateurs
    Enfin j'ai pas compris ton point, d�sol� ... au final �a ne change rien, c'est �a ? Il optimise le modulo pour qu'il prenne le moins de cycle possible, �tant donn� que c'est modulo 2 et pas modulo 237 ? Ou c'est juste le modulo en g�n�ral qui est opimis� ?

  6. #6
    Membre chevronn�
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Par d�faut
    Un bon compilateur (m�me un moyen maintenant) optimise syst�matiquement les divisions par des constantes. Donc, oui, le modulo y'a de grande chance qu'il soit un tantinet arrang� et je pense qu'au final il ne doit pas y avoir d'�cart de perf mesurable.

  7. #7
    Invit�
    Invit�(e)
    Par d�faut
    Citation Envoy� par VoidSeer
    il ne doit pas y avoir d'�cart de perf mesurable.
    D'apr�s moi, c'est pire que �a : que tu utilises une syntaxe ou l'autre, le r�sultat en code machine / assembleur sera exactement le m�me.

    Pour gcc :
    Algebraic simplifications
    Expressions are simplified using algebraic properties of their operators and operands. For instance, i + 1 - i is converted to 1. Other properties like associativity, commutativity, and distributivity are also used to simplify expressions.

    Constant folding
    Expressions for which all operands are constant can be evaluated at compile time and replaced with their values. For instance, the expression a = 4 + 3 - 8 can be replaced with a = -1.
    Traduction :
    Simplifications alg�briques
    Les expressions sont simplifi�es en utilisant les propri�t�s alg�briques de leurs op�rateurs et op�randes. Par exemple, i + 1 - i en converti en 1. D'autres propri�t�s comme l'associativit�, la commutativit�, et la distributivit� sont aussi utilis�es pour simplifier les expressions.

    Evaluation des constantes
    Les expressions dont toutes les op�randes sont des constantes peuvent �tre �valu�es au moment de la compilation et remplac�es par leur valeurs. Par exemple, l'expression a = 4 + 3 - 8 peut �tre remplac�e par a = -1.

  8. #8
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    Citation Envoy� par remram44
    Citation Envoy� par VoidSeer
    il ne doit pas y avoir d'�cart de perf mesurable.
    D'apr�s moi, c'est pire que �a : que tu utilises une syntaxe ou l'autre, le r�sultat en code machine / assembleur sera exactement le m�me.
    +1
    Cela fait un moment que les compilos sont cens�s maitriser les multiplications et divisions par des constantes. (genre *254 qui est remplac� par d�calages et soustractions...)
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

  9. #9
    R�dacteur

    Avatar de Matthieu Brucher
    Profil pro
    D�veloppeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France, Pyr�n�es Atlantiques (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par d�faut
    En revanche, �a pourrait �tre plus int�ressant le !(machin&1), non ? Pas de test, pas de saut, ...

  10. #10
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    � quoi sert-il de savoir qu'un nombre est pair si on n'utilise pas ce savoir? C'est � ca que sert la structure conditionnelle: � savoir ce qu'on fait s'il est pair ou non. Il y aura donc toujours un test et un saut...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  11. #11
    Expert confirm�

    Inscrit en
    Novembre 2005
    Messages
    5 145
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par d�faut
    Citation Envoy� par Miles
    En revanche, �a pourrait �tre plus int�ressant le !(machin&1), non ? Pas de test, pas de saut, ...
    En quoi est-ce different de machin % 2 == 0 ? A part bien sur que l'utilisation de % a un comportement garanti dans le cas des nombres negatifs (je suis d'accord, les machines en complement a un ne sont pas legion).

  12. #12
    R�dacteur

    Avatar de Matthieu Brucher
    Profil pro
    D�veloppeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France, Pyr�n�es Atlantiques (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par d�faut
    Citation Envoy� par M�dinoc
    � quoi sert-il de savoir qu'un nombre est pair si on n'utilise pas ce savoir? C'est � ca que sert la structure conditionnelle: � savoir ce qu'on fait s'il est pair ou non. Il y aura donc toujours un test et un saut...
    Non, on peut utiliser cette donn�e dans d'autres op�rations avec addition, genre (result * nombre) + (!result * nombre), m�me si ce n'est pas tr�s propre - true a une valeur fixe valant 0xFF, non ? -

  13. #13
    Expert confirm�

    Inscrit en
    Novembre 2005
    Messages
    5 145
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par d�faut
    Citation Envoy� par Miles
    On peut utiliser cette donn�e dans d'autres op�rations avec addition, genre (result * nombre) + (!result * nombre), m�me si ce n'est pas tr�s propre - true a une valeur fixe valant 0xFF, non ? -
    true vaut 1 et false 0.

  14. #14
    CGi
    CGi est d�connect�
    Expert confirm�
    Avatar de CGi
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 061
    D�tails du profil
    Informations personnelles :
    Localisation : France, Allier (Auvergne)

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 061
    Par d�faut
    D'apr�s moi, c'est pire que �a : que tu utilises une syntaxe ou l'autre, le r�sultat en code machine / assembleur sera exactement le m�me.
    J'ai fait le test par curiosit� :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    int estpair1(int x)
    {
       return x&1;
    }
    ------------------------------	
     
    	push ebp
    	mov ebp,esp
     
    	mov eax,dword ptr [ebp+8]
    	and eax,1
     
    	pop ebp
    	ret

    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
    int estpair2(int x)
    {
       return x%2;
    }	
    ------------------------------
     
    	push ebp
    	mov ebp,esp
     
    	mov eax,dword ptr [ebp+8]
    	and eax,-2147483647
    	jns short S1
    	dec eax
    	or eax,-2
    	inc eax
    S1:	
    	pop ebp
    	ret
    Site : http://chgi.developpez.com

    Pourquoi faire simple quand on peut faire compliqu� ? (Jacques Rouxel)

  15. #15
    Expert confirm�

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par d�faut
    Si tu remplaces "int" par "unsigned int" pour le type de x, tu devrais obtenir la m�me chose.

  16. #16
    CGi
    CGi est d�connect�
    Expert confirm�
    Avatar de CGi
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 061
    D�tails du profil
    Informations personnelles :
    Localisation : France, Allier (Auvergne)

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 061
    Par d�faut
    Si tu remplaces "int" par "unsigned int" pour le type de x, tu devrais obtenir la m�me chose.
    Affirmatif !



    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    int nbpair1(unsigned int x)
    {
       return x&1;
    }
    ------------------------------	
     
    	push ebp
    	mov ebp,esp
     
    	mov eax,dword ptr [ebp+8]
    	and eax,1
     
    	pop ebp
    	ret
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    int nbpair2(unsigned int x)
    {
       return x%2;
    }	
    ------------------------------
     
    	push ebp
    	mov ebp,esp
     
    	mov eax,dword ptr [ebp+8]
    	and eax,1
     
    	pop ebp
    	ret
    Site : http://chgi.developpez.com

    Pourquoi faire simple quand on peut faire compliqu� ? (Jacques Rouxel)

  17. #17
    Expert confirm�

    Inscrit en
    Novembre 2005
    Messages
    5 145
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par d�faut
    Citation Envoy� par CGi
    D'apr�s moi, c'est pire que �a : que tu utilises une syntaxe ou l'autre, le r�sultat en code machine / assembleur sera exactement le m�me.
    J'ai fait le test par curiosit� :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int estpair1(int x)
    {
       return x&1;
    }
     
    int estpair2(int x)
    {
       return x%2;
    }
    Tu as teste avec des parametres negatifs? Normalement -1 & 1 donne 1 tandis que -1 % 2
    donne -1. Pas trop etonnant que le code soit different. Je me demande si ton optimiseur est assez pousse pour savoir que les deux fonctions suivantes sont equivalentes:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    bool estpair(int x)   { return (x&1) == 0; }
    bool estpair2(int x) { return (x%2) == 0; }

  18. #18
    R�dacteur

    Avatar de Matthieu Brucher
    Profil pro
    D�veloppeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France, Pyr�n�es Atlantiques (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par d�faut
    Citation Envoy� par jmarc68
    Citation Envoy� par Miles
    On peut utiliser cette donn�e dans d'autres op�rations avec addition, genre (result * nombre) + (!result * nombre), m�me si ce n'est pas tr�s propre - true a une valeur fixe valant 0xFF, non ? -
    true vaut 1 et false 0.
    C'est encore mieux

  19. #19
    CGi
    CGi est d�connect�
    Expert confirm�
    Avatar de CGi
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 061
    D�tails du profil
    Informations personnelles :
    Localisation : France, Allier (Auvergne)

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 061
    Par d�faut
    Citation Envoy� par jmarc68
    Je me demande si ton optimiseur est assez pousse pour savoir que les deux fonctions suivantes sont equivalentes
    Et bien apparement non :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    bool estpair1(int x)
    {
       return (x&1) == 0;
    }
    ------------------------------	
     
    	push ebp
    	mov ebp,esp
    	test byte ptr [ebp+8],1
    	sete al
    	and eax,1
    	pop ebp
    	ret
    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
    bool estpair2(int x)
    {
       return (x%2) == 0;
    }	
    ------------------------------
     
    	push ebp
    	mov ebp,esp
    	mov eax,dword ptr [ebp+8]
    	and eax,-2147483647
    	jns short S1
    	dec eax
    	or eax,-2
    	inc eax
    S1:	test eax,eax
    	sete al
    	and eax,1
     
    	pop ebp
    	ret
    J'ai bien test� avec diff�rentes options d'otimisation mais �a ne change rien.
    Site : http://chgi.developpez.com

    Pourquoi faire simple quand on peut faire compliqu� ? (Jacques Rouxel)

  20. #20
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Quelle est la condition, pour jns ? (surtout apr�s un AND...)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

+ R�pondre � la discussion
Cette discussion est r�solue.
Page 1 sur 2 12 Derni�reDerni�re

Discussions similaires

  1. savoir si un nombre est pair ou impair?
    Par bubulle29 dans le forum MATLAB
    R�ponses: 3
    Dernier message: 05/06/2009, 15h39
  2. Comment savoir si un nombre est premier ?
    Par Extra-Nitro dans le forum G�n�ral Python
    R�ponses: 9
    Dernier message: 03/01/2006, 14h28
  3. VB Comment savoir si un chiffre est pair ou impair ?
    Par PRACH dans le forum VB 6 et ant�rieur
    R�ponses: 2
    Dernier message: 07/09/2005, 18h02
  4. R�ponses: 4
    Dernier message: 30/06/2002, 20h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo