Comment faire pour obtenir l'inverse de la valeur d'une variable bool en C++
Pour moi, une variable boolean indique vrai ou faux.
Certains bool variable a été défini et initialisé à une valeur inconnue pour nous. Je veux juste la valeur opposée. Comment devrais-je le faire en C++?
Solutions intéressantes que vous ne devriez pas utiliser:
b = b?false:true;
b ^=1;
b =(b+1)%2;
b =1>>b;
b =1-b;
b = b-1;
b =-1*(b-1);
b = b+'0'+'1'-'b';
Comme un exercice, essayez de comprendre pourquoi les solutions ci-dessus travail.
+1 pour la réponse créative avec d'avertissement approprié, mais je n'aurais pas écrit que C style jette, je ne suis même pas sûr que vous avez besoin de moulages, par exemple b=1-b le membre de droite sera promu automatiquement Merci. J'ai enlevé le plâtre. Je pense, en termes de casting, donc je les ai mis dans mais bien sûr, ils sont inutiles. votre première solution était la première qui est venue à mon esprit 🙂
Vous pouvez choisir si vous voulez écrire !, ou not, ou un mélange.
Cependant, toujours à partir de la version 10.0 de Visual C++ ne possède pas le mot réservé not intégré.
Donc pour Visual C++, si vous souhaitez utiliser not vous devez inclure l' [iso646.h] en-tête, qui est un en-tête de la bibliothèque standard C, disponible aussi en C++. Cependant, pour une conforme à la norme C++ compilateur y compris l'en-tête n'a pas d'effet (comme indiqué dans la note de bas de page 176 du C++11). De sorte que vous pouvez inclure de toute façon:
#include<iostream>#include<iso646.h>//Visual C++ is not quite standard and requires this.int main(){usingnamespace std;//Display false and true as "false" and "true":
cout << boolalpha;
cout <<"!false = "<<!false<< endl;
cout <<"not false = "<< not false<< endl;}
Sur la COMPARAISON des valeurs booléennes:
Certains novices écrire des choses comme
v !=true
Ce n'est pas seulement verbeux mais une véritable dangereux habitude. La raison que c'est dangereux, c'est que de nombreuses Api de définir les types boolean, où les valeurs possibles ne sont pas restreints à 0 et de 1 (un premier exemple est la Fenêtre de BOOL type). Ensuite, une valeur peut désigner Vrai logique tout en n'étant pas numériquement égale à True.
Donc, pour un maximum de sécurité, prenez l'habitude d'utiliser ! ou not, et juste jamais comparer directement à une valeur booléenne littérale.
Un exemple où il est généralement nécessaire de comparer des valeurs booléennes est l'endroit où vous avez besoin de logique Xor (ou exclusif, ou-ou). C++ ne dispose pas d'un opérateur à l' bool niveau. Mais vous pouvez écrire a != b pour atteindre le même que pour un hypothétique boolniveau de l'opérateur Xor aurait.
Logique Xor CONTRÔLÉE INVERSION
Dans certains cas, vous souhaitez une inversion (application de la logique Non), si la condition est vraie, comme ...
if( condition ){
x =!x;}
Cela peut également être écrite ...
x =((condition)!= x);
Il ressemble total de dissimulation, mais il a deux caractéristiques qui peuvent être utiles dans certaines situations:
il peut être utilisé comme une sorte de “masque” inversion d'une matrice de a de valeurs, les valeurs d'un autre tableau servant à contrôler si chaque élément de a est inversé, et
c'est une pure expression de calcul qui n'implique pas un choix de chemin d'exécution, et donc il peut parfaitement être utilisé comme une optimisation (cependant, je crois qu'un compilateur moderne est susceptible de le faire pour vous à la machine au niveau du code, s'il est approprié de le faire).
Cheers & hth.,
ne savais pas au sujet d'être en mesure d'utiliser not en tant que mot clé. Nice stuff Fal
Sérieux ????? N'utilisez pas compliqué, l'opérateur lorsqu'un simple (!) de le faire. Vos futurs responsables vais regarder le code, vous demandez-vous à quoi il est vraiment censé faire, sans se rendre compte qu'il est approprié tel qu'il est. Tout le monde me battre pour la vraie réponse, j'ai donc décidé de poster une alternative. Par, Si je trouve quelqu'un de mon entreprise, à regarder ce code et vous demandez-vous ce qu'il fait, la personne peut aller à la chasse pour un nouvel emploi. Cette réponse appropriée à la question. Si l'idée est juste de produire quelque chose de différent de la réponse correcte tout en produisant toujours le résultat correct, je vote bool opposite = (someboolvar == false);
Suffit d'utiliser la
!
opérateur:OriginalL'auteur Mysticial
Solution correcte:
Solutions intéressantes que vous ne devriez pas utiliser:
Comme un exercice, essayez de comprendre pourquoi les solutions ci-dessus travail.
b=1-b
le membre de droite sera promu automatiquementMerci. J'ai enlevé le plâtre. Je pense, en termes de casting, donc je les ai mis dans mais bien sûr, ils sont inutiles.
votre première solution était la première qui est venue à mon esprit 🙂
OriginalL'auteur Cam
OPÉRATEURS logiques Non
Vous pouvez choisir si vous voulez écrire
!
, ounot
, ou un mélange.Cependant, toujours à partir de la version 10.0 de Visual C++ ne possède pas le mot réservé
not
intégré.Donc pour Visual C++, si vous souhaitez utiliser
not
vous devez inclure l' [iso646.h] en-tête, qui est un en-tête de la bibliothèque standard C, disponible aussi en C++. Cependant, pour une conforme à la norme C++ compilateur y compris l'en-tête n'a pas d'effet (comme indiqué dans la note de bas de page 176 du C++11). De sorte que vous pouvez inclure de toute façon:Sur la COMPARAISON des valeurs booléennes:
Certains novices écrire des choses comme
Ce n'est pas seulement verbeux mais une véritable dangereux habitude. La raison que c'est dangereux, c'est que de nombreuses Api de définir les types boolean, où les valeurs possibles ne sont pas restreints à 0 et de 1 (un premier exemple est la Fenêtre de
BOOL
type). Ensuite, une valeur peut désigner Vrai logique tout en n'étant pas numériquement égale à True.Donc, pour un maximum de sécurité, prenez l'habitude d'utiliser
!
ounot
, et juste jamais comparer directement à une valeur booléenne littérale.Un exemple où il est généralement nécessaire de comparer des valeurs booléennes est l'endroit où vous avez besoin de logique Xor (ou exclusif, ou-ou). C++ ne dispose pas d'un opérateur à l'
bool
niveau. Mais vous pouvez écrirea != b
pour atteindre le même que pour un hypothétiquebool
niveau de l'opérateur Xor aurait.Logique Xor CONTRÔLÉE INVERSION
Dans certains cas, vous souhaitez une inversion (application de la logique Non), si la condition est vraie, comme ...
Cela peut également être écrite ...
Il ressemble total de dissimulation, mais il a deux caractéristiques qui peuvent être utiles dans certaines situations:
il peut être utilisé comme une sorte de “masque” inversion d'une matrice de
a
de valeurs, les valeurs d'un autre tableau servant à contrôler si chaque élément dea
est inversé, etc'est une pure expression de calcul qui n'implique pas un choix de chemin d'exécution, et donc il peut parfaitement être utilisé comme une optimisation (cependant, je crois qu'un compilateur moderne est susceptible de le faire pour vous à la machine au niveau du code, s'il est approprié de le faire).
Cheers & hth.,
not
en tant que mot clé. Nice stuff FalOriginalL'auteur Cheers and hth. - Alf
Vous voulez le PAS de l'opérateur, qui est
!
en C, C++ et bien d'autres langues.OriginalL'auteur Paul R
Donné
bool value;
avoir été réglé de façon appropriée:Vous devez utiliser pour cela:
où
!
est logique de ne pas ici.En outre, il existe un certain nombre d'autres façons d'atteindre le même effet, qui sont tous de la dissimulation de l':
std::not_equal_to<bool>()(true,value);
(nécessite#include <functional>
)std::count(&value, &value+1, false);
(nécessite#include <algorithm>
)std::count_if(&value,&value+1,std::not1(std::bind2nd(std::greater_equal<bool>(), true)));
OriginalL'auteur Flexo
vous devez utiliser l'opérateur not de cette façon, il vous donnera l'opposé
cela devrait vous donner ce dont vous avez besoin.
OriginalL'auteur GodsCrimeScene
N'utilisez pas compliqué, l'opérateur lorsqu'un simple (
!
) de le faire. Vos futurs responsables vais regarder le code, vous demandez-vous à quoi il est vraiment censé faire, sans se rendre compte qu'il est approprié tel qu'il est.Tout le monde me battre pour la vraie réponse, j'ai donc décidé de poster une alternative. Par, Si je trouve quelqu'un de mon entreprise, à regarder ce code et vous demandez-vous ce qu'il fait, la personne peut aller à la chasse pour un nouvel emploi.
Cette réponse appropriée à la question.
Si l'idée est juste de produire quelque chose de différent de la réponse correcte tout en produisant toujours le résultat correct, je vote
bool opposite = (someboolvar == false);
OriginalL'auteur karlphillip