Y a-t-il quelque chose qui empêche cette forme d'utilisation du test XOR?Y at-il quelque chose qui empêche cette forme d'utilisation du test XOR?
bool result = false; bool b1 = false; bool b2 = false; ... if (b1^b2) { result = true; }
Y a-t-il quelque chose qui empêche cette forme d'utilisation du test XOR?Y at-il quelque chose qui empêche cette forme d'utilisation du test XOR?
bool result = false; bool b1 = false; bool b2 = false; ... if (b1^b2) { result = true; }
Je préférerais le plus clair:
if (b1 != b2)
{
result = true;
}
+1 Fantastique :) – AraK
Dépend du contexte. Si vous essayez de faire un XOR, alors c'est ce que vous devriez écrire. –
@Peter L'opérateur XOR sert à manipuler les bits. Il n'y a généralement aucune raison de faire de telles manipulations avec bools. –
Non, c'est tout à fait acceptable (si vous épelez correctement false
dans bool b2
:]).
#include <iostream>
int main()
{
if (false^false)
{
std::cout << "false^false" << std::endl;
}
if (true^false)
{
std::cout << "true^false" << std::endl;
}
}
Sortie: true^false
Bien sûr, dans l'exemple que vous avez fourni, vous pouvez aussi faire result = x1^x2
comme raccourci.
L'autre question ici est de savoir s'il y avait quelque chose qui vous empêchait d'essayer vous-même.
Je ne suis pas sûr que c'est une bonne idée. Le^est un opérateur bitwise pas un logique. donc 1^2 = 3. Je suis un peu rouillé en C++, mais je pense que bool sont stockées sous forme unsigned char ou quelque chose de si
bool a= 1
bool b = 2
est valide.
a == true; // yes
b == true; // yes
a^b == true; // yes. not what you are expecting :-(
Pour être sûr d'utiliser les bonnes valeurs vrai/faux, vous devez faire quelque chose comme (!! a)^(!! b)
Pourquoi voudriez-vous? –
Je ne veux pas être grossier ici ... mais c'est le genre de chose qui peut être facilement testé. – ereOn
@ ere0n: En fait, je pense que c'est assez dépendante de l'implémentation, donc je ne dirais pas qu'il est facile à tester. –