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.
Pourquoi est-ce voté pour la fermeture – Simsons
Cela doit être un dupe –
Et être downvoted aussi !!!! – Simsons