Ils ne sont pas les mêmes. L'un est OU au niveau du bit et est un OU logique.
X || Y est un ou logique, qui signifie la même chose que "X ou Y" et s'applique aux valeurs bool. Il est utilisé dans des conditions ou des tests. X et Y dans ce cas, peut être remplacé par n'importe quelle expression qui renvoie un bool. Exemple:
if (File.Exists("List.txt") || x > y ) { ..}
La clause évalue à true si l'une des deux conditions est vraie. Si la première condition est vraie (si le fichier existe), alors que la deuxième condition ne doivent pas et ne sera pas évaluée.
La seule pipe ( | ) est un bit à bit OU. Pour savoir ce que cela signifie que vous devez être de comprendre comment les nombres sont stockés dans l'ordinateur. Supposons que vous avez un 16 bits (Int16) qui contient la valeur 15. C'est stockée comme 0x000F (en hexadécimal) qui est le même que 0000 0000 0000 1111 en binaire. Le bit à bit OU prend deux quantités et de la OU de chaque paire de bits correspondants, de sorte que si le bit est à 1 dans le plan de la quantité, il est de 1 dans le résultat. Par conséquent, si a = 0101 0101 0101 0101 (qui évalue à 0x5555 en hexadécimal) et b = 1010 1010 1010 1010 (qui est 0xaaaaa), alors a | b = 1111 1111 1111 1111 = 0xFFFF.
Vous pouvez utiliser au niveau du bit OU du (seul tuyau) en C# pour tester si un ou plus d'un ensemble particulier de bits est activé. Vous pouvez le faire si vous avez, disons, 12 des booléens ou des valeurs binaires de test, et ils sont tous indépendants. Supposons que vous disposez d'un élève de la base de données. Un ensemble indépendant de booléens peuvent être, par exemple, mâle/femelle, domicile/sur le campus, courant/non-courant, inscrits/non inscrits, etc. Plutôt que de stocker un champ booléen pour chacune de ces valeurs, vous pouvez stocker un seul bit pour chacun. Le mâle/femelle pourrait être bits 1. inscrits/non peut-être 2 bits.
Ensuite, vous pouvez utiliser
if ((bitfield | 0x0001) == 0x0001) { ... }
comme un test pour voir si aucun bit n'est activée, à l'exception de "l'élève est un garçon de bits, ce qui est ignoré. Hein? Ainsi, le bit à bit OU retourne 1 pour chaque bit qui est en soit le nombre. Si le résultat de la bit-à-bit OU supérieur = 0x0001, qu'il n'y a pas de bits activé dans le champ de bits, sauf peut-être le premier bit (0x0001), mais vous ne pouvez pas dire à coup sûr si le premier bit est sur, car il est masqué.
Il y a un correspondant && et &, ce qui est logique ET et bit à bit ET. Ils ont de l'analogie de comportement.
Vous pouvez utiliser
if ((bitfield & 0x0001) == 0x0001) { ... }
pour voir si le premier bit est activé dans un champ de bits.
EDIT: je ne peux pas croire que j'ai voté pour la!