2010-09-17 8 views

Répondre

17

Si vous l'appliquez à des types intégrés, ils sont opérateur et XOR ou au niveau du bit. Toutefois, si vous les appliquez à des types booléens, ils sont logiques ou et xor. Regardez une explication de or operator et xor operator

Vous pouvez obtenir plus de détails sur les opérations booléennes du wikipedia truth table

25
  • | = (bit/non court-circuit) "ou"
  • ^ = "XOR"

et pour info, "non" (négation logique) est ~

-6

^ XOR logique

| logique OU

mise à jour

en C# ses opérations logiques aussi:

Console.WriteLine(true^false); // logical exclusive-or 
    Console.WriteLine(false^false); // logical exclusive-or 
+6

-1 Aucun de ces opérateurs logiques. Ils sont tous deux BitWise ... et vous avez mélangé XOR et OU. –

+2

en plus d'obtenir XOR et OR en arrière l'article MSDN énumérés ci-dessus à partir d'emddudley les liste tous les deux comme logique –

+0

Michael, logique ou opérateur || C/C++, notez en bas de ce site (explique la différence entre logique et bitwise) http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=/com.ibm.xlcpp8a.doc /language/ref/logore.htm –

7

MSDN dispose d'une documentation sur tous les opérateurs C# à:

http://msdn.microsoft.com/en-us/library/6a71f45d.aspx


EDIT - Jon B a commenté qu'une citation pertinente du document lié L'information serait utile.

| est le Logical OR operator.

Binaire | les opérateurs sont prédéfinis pour les types entiers et bool. Pour les types intégraux, | calcule le OU bit à bit de ses opérandes. Pour les opérandes boolés, | calcule le OU logique de ses opérandes; c'est-à-dire que le résultat est faux si et seulement si ses deux opérandes sont faux.

^ est la Logical XOR operator.

Les opérateurs binaires^sont prédéfinis pour les types entiers et bool. Pour les types entiers,^calcule le OU exclusif de ses opérandes. Pour les opérandes booléens,^calcule l'exclusif logique - ou de ses opérandes; c'est-à-dire que le résultat est vrai si et seulement si exactement l'un de ses opérandes est vrai.

+1

-1 Envoyer un lien vers docs n'est pas une réponse. –

+1

Ou est-ce ... =)) – Cipi

+1

@Jon B, donc vous aimez habituellement répéter les choses encore et encore? Pourquoi ne pas utiliser une grande ressource qui l'explique au lieu de réinventer la roue? –

2

ce sont des opérateurs logiques au niveau du bit

| est un ou link

^est XOR link

2

Avec les types intégraux, | est un bit ou,^un bit xor et pour l'exhaustivité & est un bit et.

Avec les types booléens, | est un booléen ou,^un booléen xor et & un booléen &.

En comparaison, || est un booléen de court-circuit ou - si le premier opérande évalue comme vrai le second opérande n'est pas évalué. & & est un booléen de court-circuit et - si le premier opérande est faux, le second n'est pas évalué. Il n'y a pas de court-circuit parce qu'il n'y a pas de cas où le second n'a pas besoin d'être évalué.

|| et & & sont plus souvent utilisés que | et & dans les cas booléens car il y a normalement au moins un gain d'efficacité minime et jamais une perte. Cependant, si l'opérande de droite avait un effet secondaire qu'il était important de déclencher dans tous les cas, alors | ou & serait le seul à utiliser. En pratique, cela est rare, et une mauvaise odeur (si l'effet secondaire est important, il devrait être évalué dans une expression distincte pour rendre le but plus clair). Edit: Une source de confusion potentielle, est que dans d'autres langages, on peut utiliser des types entiers comme booléens (par exemple, if(53) et c'est comme if(true)), ce qui rend les distinctions entre les opérateurs ci-dessus très différentes: sont les mêmes si un type "purement" booléen est utilisé (qui n'a que vrai et faux que ses valeurs possibles) mais pas autrement. C# n'autorise pas délibérément les opérations booléennes sur des types entiers pour éviter les erreurs possibles dans ces langages.

Questions connexes