2010-09-17 17 views

Odpowiedz

17

Jeśli stosuje się go do integralnych typach są operatory bitowe albo i xor. Jednak jeśli zastosujesz je do typów boolowskich, są one logiczne lub xor. Spójrz na wyjaśnienie or operator i xor operator

można uzyskać więcej informacji na temat operacji logicznych z wikipedii truth table

25
  • | = (bitowe/non-zwarcie) "lub"
  • ^ = "XOR"

i o "a nie" (bitowe negacja) jest ~

-6

^ logiczna XOR

| Logiczne OR

aktualizacja

w C# jej operacje logiczne TOO:

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

-1 Żadne z nich nie jest operatorem logicznym. Oboje są BitWise ... i mieszałeś XOR i OR. –

+2

oprócz otrzymywania XOR i OR wstecz wyżej wymieniony artykuł MSDN z emddudley wymień je na oba jako Logiczny –

+0

Michael, Logiczny lub operator || C/C++, uwaga na dole tej strony (wyjaśnia różnicę między logiczną i bitową) http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=/com.ibm.xlcpp8a.doc /language/ref/logore.htm –

7

MSDN ma dokumentację na wszystkich C# operatorów w:

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


EDIT - Jon B skomentował odpowiedni cytat z połączonego dokumentu racja byłaby przydatna.

| to Logical OR operator.

Binarny | operatory są predefiniowane dla typów integralnych i bool. Dla typów integralnych, | oblicza bitowe OR swoich operandów. W przypadku operandów logicznych, | oblicza logiczne OR swoich operandów; to znaczy, wynik jest fałszywy wtedy i tylko wtedy, gdy oba argumenty są fałszywe.

^ to Logical XOR operator.

Operatory binarne^są predefiniowane dla typów integralnych i bool. Dla typów całkowitych^oblicza bitowe exclusive-OR swoich operandów. Dla operandów logicznych,^oblicza logiczne wyłączne - lub jego operandy; to znaczy, wynik jest prawdziwy wtedy i tylko wtedy, gdy dokładnie jeden z jego argumentów jest prawdziwy.

+1

-1 Zamieszczanie linku do dokumentów nie jest odpowiedzią. –

+1

A może ... =)) – Cipi

+1

@Jon B, więc zazwyczaj lubisz powtarzać rzeczy w kółko? Dlaczego nie skorzystać z doskonałego zasobu, który wyjaśnia to zamiast ponownego wynajdywania koła? –

2

ze zintegrowanym typów | jest bitowym lub,^bitowym xor i dla kompletności & jest bitowym i.

W typach boolowskich, | jest boolean lub,^a boolean xor i & a boolean &.

Dla porównania || to boolean zwarciowy lub - jeśli pierwszy operand jest prawdziwy, drugi argument nie jest oceniany. & & & to boolean zwierający i - jeśli pierwszy operand jest fałszywy, drugi nie jest oceniany. Nie ma zwarcia ^, ponieważ nie ma przypadku, w którym drugi nie musi być oceniany.

|| i & & są częściej używane niż | i & w przypadkach boolowskich, ponieważ zwykle istnieje co najmniej niewielki wzrost wydajności i nigdy straty. Jednak jeśli prawy operand miał efekt uboczny, który był ważny, aby uruchomić we wszystkich przypadkach, to | lub & byłby używany. W praktyce jest to rzadkie i nieprzyjemny zapach (jeśli efekt uboczny jest ważny, powinien być oceniany w oddzielnym wyrażeniu, aby cel był wyraźniejszy).

Edytuj: źródłem potencjalnego zamieszania, jest to, że w niektórych innych językach można używać całych typów jako booleans (np. Możesz zrobić if(53) i jest taki sam jak if(true)), co powoduje, że różnice pomiędzy powyższymi operatorami są całkiem różne: "jest taki sam, jeśli użyto typu" czysto "typu boolowskiego (który ma tylko wartości true i false jako możliwe wartości), ale nie inaczej. C# celowo nie dopuszcza operacji boolowskich na typach integralnych właśnie w celu uniknięcia możliwości błędów, które istnieją w takich językach.