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

Langage C++ Discussion :

un petit exercice pour les vacances


Sujet :

Langage C++

  1. #1
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut un petit exercice pour les vacances
    Salut,

    je suis tombé sur un truc bizarre. Du coup je vous propose un petit exercice amusant.
    Prenons le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <iostream>
    int main() 
    {
       int i = -1;
       unsigned int j = 1;
       if ( i < j ) 
          std::cout << " i is less than j";
       else
          std::cout << " i is greater than j";
       return 0;
    }
    Question: quel est l'output console ?
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    warning C4018: '<': signed/unsigned mismatch
    Ensuite, c'est indéfini et un UB compilo-specific imo.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Bousk Voir le message
    warning C4018: '<': signed/unsigned mismatch
    Pas en /W2 (ok je pinaille)
    Tu as raison, alors je reformule ma question :
    Quel est l'output, sur les 2 compilateurs sur lesquels j'ai pu tester : GCC 4.9.2 et MSVC 2017 ?
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  4. #4
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 739
    Points : 3 627
    Points
    3 627
    Par défaut
    i est plus que j.

    Les règles de conversion sont parfaitement définies par la norme. Du moins, à la manière de C++ avec des pages et des pages de point à prendre en compte .

    https://en.cppreference.com/w/cpp/la...tor_arithmetic

    Otherwise, if the unsigned operand's conversion rank is greater or equal to the conversion rank of the signed operand, the signed operand is converted to the unsigned operand's type.
    Du coup, int(-1) est transformé en ~unsigned(0), qui est très grand.

  5. #5
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    Pareil.
    L'équivalent en hexa serait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (0xFFFFFFFF < 0x00000001) ...
    qui est évalué comme false.

  6. #6
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    Puisque vous aimez les petits problèmes...
    Voici une fonction qui doit agir comme une fonction de comparison en C, renvoyer un entier négatif si l<r, un entier positif si l>r, et 0 si l==r.
    Le code est-t-il correct pour toute valeur l et r ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    template<typename T>
    constexpr std::enable_if_t<
    	std::is_integral<T>::value && (sizeof(T) <= sizeof(intptr_t)),
    	intptr_t> compare_op(T l, T r) noexcept
    {
    	return intptr_t(std::make_signed_t<T>(l - r));
    }

Discussions similaires

  1. [CSS] Petits conseils pour les redimensionnements
    Par GLDavid dans le forum Mise en page CSS
    Réponses: 10
    Dernier message: 07/08/2006, 17h44
  2. J'ai un petit probleme pour les if et else
    Par Nadirov dans le forum Delphi
    Réponses: 9
    Dernier message: 02/08/2006, 13h58
  3. Petit sondage pour les cplusplusiens
    Par Float* dans le forum C++
    Réponses: 26
    Dernier message: 28/03/2006, 10h24
  4. petit conseil pour les index
    Par fpouget dans le forum Langage SQL
    Réponses: 11
    Dernier message: 10/12/2005, 04h39
  5. Une petite aide pour les API ?
    Par Yop dans le forum Windows
    Réponses: 2
    Dernier message: 04/04/2002, 21h45

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