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

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

    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    août 2004
    Messages
    4 256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : août 2004
    Messages : 4 256
    Points : 6 526
    Points
    6 526
    Billets dans le blog
    1

    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 ?
    Tester c'est douter, corriger c'est abdiquer.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    juin 2010
    Messages
    5 989
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : juin 2010
    Messages : 5 989
    Points : 26 633
    Points
    26 633
    Billets dans le blog
    1

    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
    Développeur de jeux vidéo
    Inscrit en
    août 2004
    Messages
    4 256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : août 2004
    Messages : 4 256
    Points : 6 526
    Points
    6 526
    Billets dans le blog
    1

    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 ?
    Tester c'est douter, corriger c'est abdiquer.

  4. #4
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    juin 2011
    Messages
    597
    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 : 597
    Points : 2 876
    Points
    2 876

    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 107
    Détails du profil
    Informations forums :
    Inscription : avril 2005
    Messages : 1 107
    Points : 921
    Points
    921

    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 107
    Détails du profil
    Informations forums :
    Inscription : avril 2005
    Messages : 1 107
    Points : 921
    Points
    921

    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