Dzielimy się z Wami bezpłatnie wiedzą programistyczną.
Jeżeli doceniacie naszą pracę możecie nas wesprzeć dobrowolną wpłatą:
Operacje logiczne C#
Podczas programowania nieustannie pojawia się konieczność logicznego sprawdzania wartości zmiennych. Operacje logiczne mają bardzo różnorodne zastosowania, pozwala np. na kontrolowanie występujących zdarzeń, sprawdzanie dostępności funkcji, czy też zarządzanie zalogowanymi osobami w serwisie.
Spis treści
Język C# udostępnia wymienione poniżej operatory logiczne:
AND (iloczyn logiczny) | x & y |
XOR (suma modulo 2) | x ^ y |
OR (suma logiczna) | x | y |
NOT (negacja) | ! |
Warunkowy AND | x && y |
Warunkowy OR | x || y |
Operator & – AND
Jednoargumentowy operator realizujący operację iloczynu logicznego. Sprawdza dwie podane wartości i zwraca wartość true tylko w przypadku gdy obie mają także wartość true.
if(false & false)
{
//tu jest kod, który się nie wykona
}
if(true & false)
{
//ten kod, także się nie wykona
}
if(true & true)
{
//ten kod zostanie wykonany
}
Operator & podczas wykonywania porównania sprawdza oba argumenty, przez co kod podany poniżej wywoła zarówno funkcję WykonajFunkcje1() jak i WykonajFunkcje2().
if(WykonajFunkcje1() & WykonajFunkcje2())
{
//tu jest kod, który się nie wykona
}
Operator może służyć także do wykonywania sumy logicznej na liczbach. Wykonywanie takiej operacji przedstawia poniższy przykład:
// Operacja sumy logicznej AND liczb heksadecymalnych
// A9 (1010 1001) oraz 3D (0011 1101).
// 1010 1001
// 0011 1101
// ---------
// 0010 1001 czyli 29
Console.WriteLine("0x{0:x}", 0xa9 & 0x3D);
//zapis {0:x} wyświetla liczbę w postaci szesnastkowej
Operator ^ – XOR
Operator realizuje operację sumy modulo 2 i zwraca wartość true tylko w sytuacji gdy sprawdza dwie różne wartości: jedna będąca true, a druga false. W przypadku dwóch wartości true lub dwóch wartości false zwraca false.
if(false ^ false)
{
//tu jest kod, który się nie wykona
}
if(true ^ true)
{
//ten kod, także się nie wykona
}
if(true ^ false)
{
//ten kod zostanie wykonany
}
Operacja XOR może być wykonywana także na liczbach. W takim przypadku wynik obliczany jest przez sumę modulo 2 z każdej pary bitów danych liczb. Sposób wyliczania zaprezentowano poniżej:
// Operacja XOR liczb heksadecymalnych
// A9 (1010 1001) oraz 3D (0011 1101).
// 1010 1001
// 0011 1101
// ---------
// 1001 0100 czyli 94
Console.WriteLine("0x{0:x}", 0xa9 ^ 0x3D);
//zapis {0:x} wyświetla liczbę w postaci szesnastkowej
Operator | – OR
Operator realizuję operację sumy logicznej co oznacza, że wystarczy by jeden z elementów posiadał wartość true by wynik operacji także miał wartość true. Sprawdzane są obie wartości, więc tak jak przy operatorze & gdy będą nimi funkcje, to obie zostaną wywołane.
if(false | false)
{
//tu jest kod, który się nie wykona
}
if(true | false)
{
//ten kod zostanie wykonany
}
if(true | true)
{
//ten kod także zostanie wykonany
}
Operator realizuję sumę logiczną także na bitach liczb podanych jako wartości:
// Operacja XOR liczb heksadecymalnych
// A9 (1010 1001) oraz 3D (0011 1101).
// 1010 1001
// 0011 1101
// ---------
// 1011 1101 czyli BD
Console.WriteLine("0x{0:x}", 0xa9 | 0x3D);
//zapis {0:x} wyświetla liczbę w postaci szesnastkowej
Operator ! – NOT
Operator jest zdefiniowany dla typu bool i realizuje negacje. W przypadku wystąpienia wartości true zwróci false i odwrotnie.
Console.WriteLine(!true); //Wyświetli wartość false
Console.WriteLine(!false); //Wyświetli wartość true
Operator && – warunkowy AND
Operator warunkowy AND realizuje taką samą operację jak operator & dodając do niej pewne założenie. Iloczyn logiczny jest prawdą tylko jeśli oba elementy są prawdziwe, a więc wystarczy by jeden z nich miał wartość false i całe wyrażenie będzie false. Taką zależność wykorzystuje warunkowy AND. Podczas sprawdzania, gdy pierwszy element jest false to drugi nie jest sprawdzany i zostaje zwrócona wartość false. Realizacja iloczynu logicznego w taki sposób może znacznie przyspieszyć wykonywanie operacji. Rozważmy to w poniższym przykładzie:
//Jeden z wartości, które będą porównywane jest false
bool warunek1 = false;
bool warunek2 = true, warunek3 = true, warunek4 = true, warunek5 = true, warunek6 = true;
// W poniższym przykładzie sprawdzany jest warunek1, następnie warunek2, warunek3 itd.
if(warunek1 & warunek2 & warunek3 & warunek4 & warunek5 & warunek6)
Console.WriteLine("0x{0:x}", 0xa9 | 0x3d);
// Natomiast poniższy przykład sprawdza warunek1, stwierdza, że operacja
// nie może zostać wykonana i kończy pracę na tym etapie
if(warunek1 && warunek2 && warunek3 && warunek4 && warunek5 && warunek6)
Console.WriteLine("0x{0:x}", 0xa9 | 0x3d);
Znajomość różnicy pomiędzy operatorami & oraz && jest istotna, gdy wartościami podawanymi do iloczynu są funkcje. W Przypadku operatora && nigdy nie można zakładać, że wszystkie funkcje zostaną uruchomione, ponieważ praca operacja zostanie zakończona przy pierwszej napotkanej wartości false.
Operator || – warunkowy OR
Podobnie jak w operatorze opisanym powyżej wykorzystana jest tu pewna właściwość sumy logicznej. Wystarczy, że jeden z elementów będzie miał wartość true by całe wyrażenie także było true. W związku z tym pierwsza napotkana wartość true powoduje zatrzymanie sprawdzania pozostałych warunków i uruchamiany jest kod pod warunkiem.
Tak jak i w operatorze && nie można zakładać, że wszystkie sprawdzane funkcje zostaną uruchomione, ponieważ po pierwszej, która zwróci true sprawdzanie się zakończy.
//Zmienne z różnymi wartościami
bool warunek1 = true, warunek2 = false, warunek3 = true, warunek4 = true, warunek5 = false, warunek6 = false;
// W poniższym przykładzie sprawdzany jest warunek1, następnie warunek2, warunek3 itd.
if(warunek1 | warunek2 | warunek3 | warunek4 | warunek5 | warunek6)
Console.WriteLine("0x{0:x}", 0xa9 | 0x3d);
// Natomiast poniższy przykład sprawdza warunek1, stwierdza, że operacja
// może zostać wykonana i wykonuje kod poniżej
if(warunek1 || warunek2 || warunek3 || warunek4 || warunek5 || warunek6)
Console.WriteLine("0x{0:x}", 0xa9 | 0x3d);
Kolejność wykonywania operacji logicznych
Kolejność wykonywania operacji jest ściśle określona i przedstawiona poniżej od operacji wykonywanych najwcześniej:
- Negacja
- XOR
- Iloczyn logiczny
- suma logiczna