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.

integral sayısal türlerinin işlenenleri için , &|ve ^ işleçleri bit tabanlı 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. Başka bir ifadeyle, trueişlenen olarak değerlendirilirse ve işlenen olarak değerlendirilirse falsefalsetrueü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ç şeklindedir false.

işleci & her zaman her iki işleneni de değerlendirir. Sol işlenen olarak değerlendirildiğinde false, işlem sonucu sağ işlenenin değerinden bağımsız olarak elde edilir false . Ancak o zaman bile sağ işlenen değerlendirilir.

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 VE değerlerini de hesaplar, ancak soldaki işlenen olarak değerlendirilirse sağ işleneni değerlendirmez false.

tamsayı sayısal türlerinin işlenenleri için işleç, & işlenenlerinin bit düzeyinde mantıksal VE 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 dışlayıcı OR 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 truedeğerlendirilir. Aksi takdirde, sonuç şeklindedir false. Diğer bir ifadeylebool, 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

tamsayı sayısal türlerinin işlenenleri için işleç, ^ işlenenlerinin bit düzeyinde 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ç şeklindedir false.

işleci | her zaman her iki işleneni de değerlendirir. Sol işlenen olarak değerlendirildiğinde true, işlem sonucu sağ işlenenin değerinden bağımsız olarak elde edilir true . Ancak o zaman bile sağ işlenen değerlendirilir.

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.

tamsayı sayısal 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ç şeklindedir 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 VEYA değerini hesaplar. sonucux || y, veya y olarak değerlendirilirse xtrueolurtrue. Aksi takdirde, sonuç şeklindedir 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.

Null atanabilir Boole mantıksal işleçleri

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

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

  • işleci | yalnızca her iki işlenen de olarak değerlendiriyorsa falseüretirfalse. x veya y olarak değerlendirilirsetrue, x | y üretir true (başka bir işlenen olarak değerlendirse nullbile). Aksi takdirde sonucu x | y şeklindedir 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ış boş yanlış null
null true boş true
boş yanlış yanlış null
null null null null

Bu işleçlerin davranışı, null atanabilir değer türleriyle 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 atanabilir 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. Bununla birlikte&, 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 Null 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 bu x yalnızca bir kez değerlendirilir.

, &|ve ^ işleçleri, aşağıdaki örnekte gösterildiği gibi 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, mantıksal işleçleri en yüksek önceliğe ve en düşük önceliğe kadar 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 belirtiminin Kullanı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.