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 :

Operateurs booleens donc logiques : )


Sujet :

C++

  1. #21
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 757
    Par défaut
    Citation Envoyé par adiya Voir le message
    l operateur (!=) renvoie "false"...
    Même avec des entiers, l'opérateur != renvoie 1 booléen : exemple if (a != 15).
    Je pense que @dalfab voulait dire qu'avec cet opérateur, si on teste 2 booléens il n'y aura pas de conversion des booléens en entier pour tester


    Citation Envoyé par adiya Voir le message
    OU eXclusif
    peut-être parce que c'est 1 opération binaire (avec 0 et 1) et non logique (avec true et false)

  2. #22
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 599
    Par défaut
    Bonjour,

    Dans un test, toutes les comparaisons restent des comparaisons sans aucune conversion. Un peu comme en mathématiques où "si a > b" n'a nul besoin d'être traduit en "si a > b est vrai". Ou en langage courant "si il pleut" ne nécessite par d'écrire "s'il est vrai qu'il pleut" J'incite à regarder soit l'assembleur généré soit la grammaire du langage pour voir que nul booléen n'est créé à la volée.

    Le résultat d'un test donne à la fois une ribambelle d'informations : '0 ? plus grand ? négatif ? etc. Selon la condition choisie le branchement utilisera une partie d'entre elles pour sauter au else ou continuer en séquence (then).

    Salutations

  3. #23
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Guesset Voir le message
    J'incite à regarder [...] la grammaire du langage pour voir que nul booléen n'est créé à la volée.
    Faisons donc ça : https://en.cppreference.com/w/cpp/language/if

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    attr(optional) if constexpr(optional) ( init-statement(optional) condition ) statement-true	(1)
    condition - one of
    • expression which is contextually convertible to bool
    • declaration of a single non-array variable with a brace-or-equals initializer.
    If the condition yields true after conversion to bool, statement-true is executed.

  4. #24
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 599
    Par défaut
    Bonjour Bktero,

    Je crois que je vais abandonner .

    Play it again Sam !
    • statement-true est le statement qui est effectué si la proposition est vérifiée, cela ne suppose nullement pas qu'il y ait un booléen, on pourrait tout aussi bien l'appeler statement_then.
    • "expression which is contextually convertible to bool" signifie juste qu'il doit pouvoir être converti en bool non qu'il l'est effectivement.

    Je vais reprendre l'exemple (mal écrit mais lisible) de bool a = bool(int i) qui est en fait une forme de a = (i != 0) ? true : false; ou, en forme longue, if(i != 0) a = true; else a = false; .

    Il y a toujours une comparaison implicite (== 0 ou !=0) ou explicite car la transformation d'un int en bool ne peut se faire autrement. Pour un être humain c'est pareil, si nous devons répondre par oui ou par non, nous allons comparer le critère à notre disposition à une valeur de référence. Dans un test, cette comparaison implicite existe même pour un booléen pour savoir quelle décision (branchement le plus souvent) prendre if(a) sera interprétée comme if(a == true) ou, un niveau en dessous, comme if(a != 0).

    Si cette comparaison n'est pas possible, le test et une conversion vers un booléen ne sont pas possibles ou non pertinents. C'est ce qu'exprime l'explication "expression which is contextually convertible to bool", les critères de test et de conversion sont les mêmes (le test est nécessaire à la conversion, non l'inverse). D'où la confusion d'assimilation de l'un à l'autre.

    Supposons un test if(i) statement_true; else statement_false; au lieu du cast i vers bool a. S'il y avait création d'un booléen caché a cela reviendrait à :
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(i != 0) a = true; else a = false;
    if(a != 0) statement_true; else statement_false;
    On voit bien que c'est inutile puisque l'expression directe fonctionne :
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    if(i != 0) statement_true; else statement_false;
    Il y a un cas où on peut provoquer la création de booléens cachés. Dans des tests complexes en désactivant le calcul abrégé des tests (parce qu'il transforme un test complexe en chaîne de tests simples). Il y a alors besoin de stockages intermédiaires de certains résultats partiels.

    Je ne reviendrais pas sur ce sujet. Si penser qu'il y a des booléens cachés facilite l'écriture de code, alors qu'importe le flacon...

    Salut

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. operateur booleen de soustraction ?
    Par Zwiter dans le forum Débuter
    Réponses: 11
    Dernier message: 22/04/2009, 13h56
  2. Utilisation d'operateur booleen dans une requete
    Par olivier] dans le forum Langage SQL
    Réponses: 3
    Dernier message: 02/01/2006, 16h16
  3. Operateur booleens
    Par konrad dans le forum OpenGL
    Réponses: 1
    Dernier message: 10/11/2005, 11h27
  4. Opérateur logique
    Par webspeak dans le forum Linux
    Réponses: 3
    Dernier message: 07/11/2005, 18h19
  5. [langage] opérateur booleen
    Par louisis dans le forum Langage
    Réponses: 4
    Dernier message: 30/06/2004, 16h12

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