Boole mantıksal işleçleri - AND, OR, NOT, XOR

Mantıksal Boole işleçleri bool işlenenleri ile mantıksal işlemler gerçekleştirir. İşleçler birli mantıksal olumsuzlama (), ikili mantıksal AND (!), OR (|&) ve özel OR (^) ile ikili koşullu mantıksal AND (&&) ve OR (||) içerir.

Tam sayı sayı türlerinin işlenenleri için , &|ve ^ işleçleri bit düzeyinde mantıksal işlemler gerçekleştirir. Daha fazla bilgi için bkz. Bit düzeyinde ve vardiya işleçleri.

Mantıksal olumsuzlama işleci !

Birli ön ek ! işleci işleneninin mantıksal olumsuzlamasını hesaplar. Diğer bir ifadeyle, trueişlenen olarak değerlendirilirse false, ve falseişleci olarak değerlendirilirse trueüretir:

bool passed = false;
Console.WriteLine(!passed);  // output: True
Console.WriteLine(!true);    // output: False

Birli sonek ! işleci null-forgiving işlecidir.

Mantıksal AND işleci &

işleci işlenenlerinin & mantıksal AND değerini hesaplar. sonucux & y, hem hem de xy olarak değerlendirilirse trueolurtrue. Aksi takdirde, sonuç olur false.

& İşleç, sol işlenen olarak değerlendirilse bile her iki işleneni de değerlendirirfalse, böylece işlem sonucu sağ işlenenin değerinden bağımsız olurfalse.

Aşağıdaki örnekte, işlecin sağ işleneni & , sol işlenenin değerinden bağımsız olarak gerçekleştirilen bir yöntem çağrısıdır:

bool SecondOperand()
{
    Console.WriteLine("Second operand is evaluated.");
    return true;
}

bool a = false & SecondOperand();
Console.WriteLine(a);
// Output:
// Second operand is evaluated.
// False

bool b = true & SecondOperand();
Console.WriteLine(b);
// Output:
// Second operand is evaluated.
// True

Koşullu mantıksal AND işleci&& işlenenlerinin mantıksal AND değerlerini de hesaplar, ancak sol işlenen olarak değerlendirilirse sağ işleneni değerlendirmezfalse.

tam sayı sayı türlerinin işlenenleri için işleç, & işlenenlerinin bit düzeyinde mantıksal AND değerlerini hesaplar. Birli & işleç, işlecin adresidir.

Mantıksal özel OR işleci ^

^ işleci işlenenlerinin mantıksal XOR olarak da bilinen mantıksal özel VEYA değerini hesaplar. sonucunun x ^ y sonucu olarak truex değerlendirilir true ve y olarak değerlendirilir falseya da x olarak değerlendirilir false ve y olarak değerlendirilir true. Aksi takdirde, sonuç olur false. Diğer bir ifadeyle bool , işlenenler için işleç eşitsizlik ^işleciyle!= aynı sonucu hesaplar.

Console.WriteLine(true ^ true);    // output: False
Console.WriteLine(true ^ false);   // output: True
Console.WriteLine(false ^ true);   // output: True
Console.WriteLine(false ^ false);  // output: False

İntegral sayısal türlerin işlenenleri için işleç, ^ işlenenlerinin bit tabanlı mantıksal özel OR değerini hesaplar.

Mantıksal OR işleci |

| işleci işlenenlerinin mantıksal OR değerini hesaplar. sonucux | y, veya y olarak değerlendirilirse xtrueolurtrue. Aksi takdirde, sonuç olur false.

| İşleç, sol işlenen olarak değerlendirilse bile her iki işleneni de değerlendirirtrue, böylece işlem sonucu sağ işlenenin değerinden bağımsız olurtrue.

Aşağıdaki örnekte, işlecin sağ işleneni | , sol işlenenin değerinden bağımsız olarak gerçekleştirilen bir yöntem çağrısıdır:

bool SecondOperand()
{
    Console.WriteLine("Second operand is evaluated.");
    return true;
}

bool a = true | SecondOperand();
Console.WriteLine(a);
// Output:
// Second operand is evaluated.
// True

bool b = false | SecondOperand();
Console.WriteLine(b);
// Output:
// Second operand is evaluated.
// True

Koşullu mantıksal OR işleci|| işlenenlerinin mantıksal OR değerini de hesaplar, ancak sol işlenen olarak değerlendirilirse sağ işleneni değerlendirmeztrue.

tam sayı sayı türlerinin işlenenleri için işleç, | işlenenlerinin bit düzeyinde mantıksal OR değerini hesaplar.

Koşullu mantıksal AND işleci &&

"Kısa devre" mantıksal AND işleci olarak da bilinen koşullu mantıksal AND işleci &&, işlenenlerinin mantıksal VE'sini hesaplar. sonucux && y, hem hem de xy olarak değerlendirilirse trueolurtrue. Aksi takdirde, sonuç olur false. olarak değerlendirilirse xfalsey değerlendirilmez.

Aşağıdaki örnekte, işlecin sağ işleneni && , sol işlenen olarak değerlendirilirse falsegerçekleştirilmeyen bir yöntem çağrısıdır:

bool SecondOperand()
{
    Console.WriteLine("Second operand is evaluated.");
    return true;
}

bool a = false && SecondOperand();
Console.WriteLine(a);
// Output:
// False

bool b = true && SecondOperand();
Console.WriteLine(b);
// Output:
// Second operand is evaluated.
// True

Mantıksal AND işleci& işlenenlerinin mantıksal AND değerlerini de hesaplar, ancak her zaman her iki işleneni de değerlendirir.

Koşullu mantıksal OR işleci ||

"Kısa devre" mantıksal OR işleci olarak da bilinen koşullu mantıksal OR işleci ||, işlenenlerinin mantıksal OR değerini hesaplar. sonucux || y, veya y olarak değerlendirilirse xtrueolurtrue. Aksi takdirde, sonuç olur false. olarak değerlendirilirse xtruey değerlendirilmez.

Aşağıdaki örnekte, işlecin sağ işleneni || , sol işlenen olarak değerlendirilirse truegerçekleştirilmeyen bir yöntem çağrısıdır:

bool SecondOperand()
{
    Console.WriteLine("Second operand is evaluated.");
    return true;
}

bool a = true || SecondOperand();
Console.WriteLine(a);
// Output:
// True

bool b = false || SecondOperand();
Console.WriteLine(b);
// Output:
// Second operand is evaluated.
// True

Mantıksal OR işleci|, işlenenlerinin mantıksal OR değerini de hesaplar, ancak her zaman her iki işleneni de değerlendirir.

Boş değer atanabilir Boole mantıksal işleçleri

İşlenenler için bool?(& mantıksal AND) ve | (mantıksal OR) işleçleri üç değerli mantığı aşağıdaki gibi destekler:

  • & işleci yalnızca her iki işleneni de olarak değerlendirilirse trueüretirtrue. x veya y olarak değerlendirilirsefalse, x & y üretir false (başka bir işlenen olarak değerlendirilse nullbile). Aksi takdirde sonucu x & y olur null.

  • | işleci yalnızca her iki işleneni de olarak değerlendirilirse falseüretirfalse. x veya y olarak değerlendirilirsetrue, x | y üretir true (başka bir işlenen olarak değerlendirilse nullbile). Aksi takdirde sonucu x | y olur null.

Aşağıdaki tabloda bu semantikler yer alır:

x y x&y x|y
true true true true
true yanlış yanlış true
true null null true
yanlış true yanlış true
yanlış yanlış yanlış yanlış
yanlış null yanlış null
null true null true
null yanlış yanlış null
null null null null

Bu işleçlerin davranışı, null atanabilir değer türlerine sahip tipik işleç davranışından farklıdır. Genellikle, bir değer türünün işlenenleri için tanımlanan bir işleç, karşılık gelen null değer türünün işlenenleriyle de kullanılabilir. Böyle bir işleç, işlenenlerinden herhangi biri olarak değerlendirilirse nullüretirnull. Ancak, & işlenenlerden biri olarak değerlendirilse nullbile ve | işleçleri null olmayan değerler üretebilir. Null değer türlerine sahip işleç davranışı hakkında daha fazla bilgi için Boş değer türleri makalesinin Kaldırılan işleçler bölümüne bakın.

Aşağıdaki örnekte gösterildiği gibi ve ^ işleçlerini işlenenlerle bool? de kullanabilirsiniz!:

bool? test = null;
Display(!test);         // output: null
Display(test ^ false);  // output: null
Display(test ^ null);   // output: null
Display(true ^ null);   // output: null

void Display(bool? b) => Console.WriteLine(b is null ? "null" : b.Value.ToString());

Koşullu mantıksal işleçler && ve || işlenenleri desteklemez bool? .

Bileşik atama

İkili işleç opiçin, formun bileşik atama ifadesi

x op= y

eşdeğerdir

x = x op y

ancak yalnızca x bir kez değerlendirilir.

Aşağıdaki &örnekte gösterildiği gibi , |ve ^ işleçleri bileşik atamayı destekler:

bool test = true;
test &= false;
Console.WriteLine(test);  // output: False

test |= true;
Console.WriteLine(test);  // output: True

test ^= false;
Console.WriteLine(test);  // output: True

Not

Koşullu mantıksal işleçler && ve || bileşik atamayı desteklemez.

İşleç önceliği

Aşağıdaki liste, en yüksek öncelikten en düşüğe kadar mantıksal işleçleri sıralar:

  • Mantıksal olumsuzlama işleci !
  • Mantıksal AND işleci &
  • Mantıksal özel or işleci ^
  • Mantıksal OR işleci |
  • Koşullu mantıksal AND işleci &&
  • Koşullu mantıksal OR işleci ||

İşleç önceliği tarafından uygulanan değerlendirme sırasını değiştirmek için parantezleri ()kullanın:

Console.WriteLine(true | true & false);   // output: True
Console.WriteLine((true | true) & false); // output: False

bool Operand(string name, bool value)
{
    Console.WriteLine($"Operand {name} is evaluated.");
    return value;
}

var byDefaultPrecedence = Operand("A", true) || Operand("B", true) && Operand("C", false);
Console.WriteLine(byDefaultPrecedence);
// Output:
// Operand A is evaluated.
// True

var changedOrder = (Operand("A", true) || Operand("B", true)) && Operand("C", false);
Console.WriteLine(changedOrder);
// Output:
// Operand A is evaluated.
// Operand C is evaluated.
// False

Öncelik düzeyine göre sıralanmış C# işleçlerinin tam listesi için C# işleçleri makalesinin İşleç önceliği bölümüne bakın.

İşleç aşırı yüklenebilirliği

Kullanıcı tanımlı bir tür , &, |ve ^ işleçlerini !aşırı yükleyebilir. İkili işleç aşırı yüklendiğinde, buna karşılık gelen bileşik atama işleci de örtük olarak aşırı yüklenir. Kullanıcı tanımlı bir tür, bileşik atama işlecini açıkça aşırı yükleyemez.

Kullanıcı tanımlı bir tür, ve ||koşullu mantıksal işleçlerini && aşırı yükleyemez. Ancak, kullanıcı tanımlı bir tür true ve false işleçlerini ve & veya | işlecini belirli bir şekilde aşırı yüklerse, && sırasıyla veya || işlemi bu türün işlenenleri için değerlendirilebilir. Daha fazla bilgi için C# dil belirtimininKullanıcı tanımlı koşullu mantıksal işleçler bölümüne bakın.

C# dili belirtimi

Daha fazla bilgi için C# dil belirtiminin aşağıdaki bölümlerine bakın:

Ayrıca bkz.