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++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de adiya
    Homme Profil pro
    auto didacte
    Inscrit en
    Juillet 2016
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : auto didacte
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2016
    Messages : 90
    Par défaut Operateurs booleens donc logiques : )
    Bien le bonjour

    j'ai une question, je ne suis pas du tout sur qu il existe une solution... je tente quand meme...

    il existe en C++, les deux operateurs logiques && et || , donc soit le simple "ET", soit le "OU exclusif...
    je ne trouve pas mention du simple "OU", qui pourrait s ecrire "&|" ... donc un operateur qui permette une condition telle que :

    soit l une des deux conditions est vraie, soit les deux

    Car il me semble que "||" n est pas vrai si les deux conditions sont remplies en meme temps...

    merci de votre eclairage

  2. #2
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 766
    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 766
    Par défaut
    C'est quoi la question ?

    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
    #include <iostream>
     
     
    int main()
    {
        std::cout << "true  || true  is " << ((true  || true)?  "true": "false") << std::endl;
        std::cout << "true  || false is " << ((true  || false)? "true": "false") << std::endl;
        std::cout << "false || true  is " << ((false || true)?  "true": "false") << std::endl;
        std::cout << "false || false is " << ((false || false)? "true": "false") << std::endl << std::endl;
     
        std::cout << "true  ^ true  is " << ((true  ^ true)?  "true": "false") << std::endl;
        std::cout << "true  ^ false is " << ((true  ^ false)? "true": "false") << std::endl;
        std::cout << "false ^ true  is " << ((false ^ true)?  "true": "false") << std::endl;
        std::cout << "false ^ false is " << ((false ^ false)? "true": "false") << std::endl;
     
     
        return 0;
    }
    Résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    true  || true  is true
    true  || false is true
    false || true  is true
    false || false is false
     
    true  ^ true  is false
    true  ^ false is true
    false ^ true  is true
    false ^ false is false

  3. #3
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    Septembre 2008
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 282
    Par défaut
    Bonjour

    A moins d'avoir un compilateur très exotique et bugué (ou ne respectant pas la norme, c'est à choix), || c'est bien la fonction OR et Vrai||Vrai donne bien Vrai.
    Le ou exclusif, c'est l'opérateur ^.

    A noté que les opérateurs doublés && et || sont des opérateurs dit à court-circuit, si la première expression fige déjà le résultat, parce qu'elle vaut faux pour le && ou vrai pour le ||, la deuxième expression n'est pas évaluée.

    &, | et ^ peuvent être utilisé comme opérateur dans une évaluation booléen pour un Test, mais aussi comme opérateur booléen bit à bit. 14&5 vaut 4, 5|6 vaut 7 et 7^10 vaut 13
    14 & 5 c'est
      1110
    & 0101
      0100 -> 4
    
    5 | 6 c'est
      0101
    | 0110
      0111 -> 7
    
    7 ^10 c'est
      0111
    ^ 1010
      1101 -> 13


    Delias

  4. #4
    Membre confirmé Avatar de adiya
    Homme Profil pro
    auto didacte
    Inscrit en
    Juillet 2016
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : auto didacte
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2016
    Messages : 90
    Par défaut
    OUPS....

    Merci beaucoup
    j ai pris conscience que... je ne savais pas...

  5. #5
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 624
    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 624
    Par défaut Opérateur logique et binaire
    Bonsoir,

    Delias a raison de citer le ^ qui opère un ou exclusif. Mais c'est un ou exclusif binaire. Il n'opère pas sur des valeurs logiques ou interprétées comme tel mais sur les bits d'entiers.

    Le xor logique n'existe pas dans ce langage.

    Si le xor logique existait, supposons a = 0xF0F0 et b = 0x00FF, comme a et b sont différents de 0 ils seront interprétés comme a = true et b = true, alors a xor b serait false. mais a ^b = 0xF00F diffère de 0, il sera interprété comme true.

    Cette différence de comportement logique vs binaire se retrouve entre || et |, entre && et &, entre ! et ~.

    Salutations

  6. #6
    Membre confirmé Avatar de adiya
    Homme Profil pro
    auto didacte
    Inscrit en
    Juillet 2016
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : auto didacte
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2016
    Messages : 90
    Par défaut
    Guesset, merci de ta reponse...

    donc, le || est un ou logique... autant pour moi...

    mais il me semblait bien : dans mes cours de C++ il n y a pas trace de ou exclusif...

    il doit y avoir moyen en combinant une expression comme :

    if ( a || b ) && ( ! ( a && b)) ...

    je sais pas trop... les logiques booleennes...

  7. #7
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 624
    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 624
    Par défaut Pourquoi faire simple ?
    Bonjour,

    En c++, il n'y a pas de ou exclusif logique mais il y a un ou exclusif binaire.

    La solution proposée fonctionne mais il y a une manière de tricher pour utiliser en lieu et place le ( ^ ) ou exclusif binaire :
    • Si les expressions a et b sont des booléens, ils correspondent à 0 et 1, alors a ^ b correspondra aussi à 0 ou 1 et sera correctement interprété comme a xor b logique.
    • Si a et b sont de valeurs entières, il suffit d'écrire (a != 0) ^ (b != 0) ou plus court mais moins lisible !(a) ^ !(b).


    Salutations

+ Répondre à la discussion
Cette discussion est résolue.

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