Boole mantıksal işleçleri (C# başvurusu)
Aşağıdaki işleçler bool işlenenleriyle mantıksal işlemler gerçekleştirmektedir:
- Birli
!(mantıksal olumsuzlama) işleci. - İkili
&(mantıksal AND),|(mantıksal OR)ve^(mantıksal dışlı OR) işleçleri. Bu işleçler her zaman her iki işleneni de değerlendirir. - İkili
&&(koşullu mantıksal AND) ve||(koşullu mantıksal OR) işleçleri. Bu işleçler yalnızca gerekli olduğu zaman sağ işleneni değerlendirir.
integral sayısal türlerinin işlenenleri için, & , ve | ^ işleçleri bitsel mantıksal işlemler gerçekleştirmektedir. Daha fazla bilgi için bkz. Bitwise ve shift işleçleri.
Mantıksal olumsuzlama işleci !
Birli ön ek ! işleci, işlenenin mantıksal olumsuzlamasını hesaplar. Başka bir ifadeyle, işlenen , ve olarak değerlendirilirse, işlenen true false olarak false değerlendirilirse true üretir:
bool passed = false;
Console.WriteLine(!passed); // output: True
Console.WriteLine(!true); // output: False
C# 8.0'dan itibaren, birli sonek ! işleci null-forgiving işlecidir.
Mantıksal AND işleci &
&işleci, işlenenlerinin mantıksal AND'sini hesaplar. sonucu, hem x & y hem de değerlendirmesi ise olarak true x y true değerlendirilir. Aksi takdirde sonuç false olur.
işleci, sol işlenen olarak değerlendirilse bile her iki işleneni de değerlendirir; böylece işlem sonucu, sağ işlenenin değerinden & false bağımsız olarak false olur.
Aşağıdaki örnekte işlecinin 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 ayrıca işlenenlerinin mantıksal AND'sini de hesaplar, ancak sol işlenen olarak değerlendirilirse sağ && işleneni değerlendirmez. false
İntegral sayısal türlerin işlenenleri içinişleç bit tabanlı & mantıksal AND işlenenlerini hesaplar. Birli & işleç, işlecinin adresidir.
Mantıksal dış or işleci ^
^işleci, işlenenlerinin mantıksal XOR olarak da bilinen mantıksal dışlı OR'sini hesaplar. sonucu olarak değerlendirilirse ve olarak değerlendirilirse veya x ^ y olarak değerlendirilir ve true olarak x true y false x false y true değerlendirilir. Aksi takdirde sonuç false olur. Başka bir bool ifadeyle, işlenenler ^ için işleci 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şleci bit tabanlı mantıksal özel ^ VEYA işlenenlerini hesaplar.
Mantıksal OR işleç |
|işleci, işlenenlerinin mantıksal VEYA'sini hesaplar. sonucu, veya değerlendirmesi ise x | y true x y true olur. Aksi takdirde sonuç false olur.
işleci, sol işlenen olarak değerlendirilse bile her iki işleneni de değerlendirir; böylece işlem sonucu, sağ işlenenin değerinden | true bağımsız olarak true olur.
Aşağıdaki örnekte işlecinin 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 ayrıca işlenenlerinin mantıksal VEYA'sini de hesaplar, ancak sol işlenen olarak değerlendirilirse sağ || işleneni değerlendirmez. true
İntegral sayısal türlerin işlenenleri içinişleç bit tabanlı mantıksal | VEYA işlenenlerini 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 AND'sini hesaplar. sonucu, hem x && y hem de değerlendirmesi ise olarak true x y true değerlendirilir. Aksi takdirde sonuç false olur. , x olarak false y değerlendirilirse değerlendirilmez.
Aşağıdaki örnekte işlecinin sağ işleneni, sol işlenen olarak değerlendirilirse gerçekleştirilecek bir yöntem && false ç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 & ayrıca işlenenlerinin mantıksal AND'sini de hesaplar, ancak her zaman her iki işleneni de değerlendirir.
Koşullu mantıksal OR işleç ||
"Kısa devre" mantıksal OR işleci olarak da bilinen koşullu mantıksal || OR işleci, işlenenlerinin mantıksal VEYA'sini hesaplar. sonucu, veya değerlendirmesi ise x || y true x y true olur. Aksi takdirde sonuç false olur. , x olarak true y değerlendirilirse değerlendirilmez.
Aşağıdaki örnekte işlecinin sağ işleneni, sol işlenen olarak değerlendirilirse gerçekleştirilecek bir yöntem || true ç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 | ayrıca işlenenlerinin mantıksal VEYA'sını da hesaplar, ancak her zaman her iki işleneni de değerlendirir.
Null değere sahip Boole mantıksal işleçleri
bool?İşleçler & için (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şlenen de olaraktruedeğerlendirilirsetrueüretir. veyaxolarakydeğerlendirilirsefalse, üretirx & yfalse(başka bir işlenen olarak değerlendirilsenullbile). Aksi takdirde sonucux & ynullolur.işleci
|yalnızca her iki işlenen de olarakfalsedeğerlendirilirsefalseüretir. veyaxolarakydeğerlendirilirsetrue, üretirx | ytrue(başka bir işlenen olarak değerlendirilsenullbile). Aksi takdirde sonucux | ynullolur.
Aşağıdaki tabloda bu semantik ortaya çıkar:
| 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 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ünde işlenenlerle de kullanılabilir. Bu tür bir null işleç, işlenenlerden herhangi biri olarak değerlendirilirse null üretir. Ancak, & işlenenlerden biri olarak değerlendirilse bile ve işleçleri null | olmayan değerler null üretebilir. Null değer türüne sahip işleç davranışı hakkında daha fazla bilgi için Null değer türleri makalesinde Lifted operators bölümüne bakın.
Aşağıdaki örnekte de olduğu ! gibi ve ^ bool? işleçlerini işlenenlerle 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 bool? işlenenleri desteklemez.
Bileşik atama
İkili işleç op için, formun bileşik atama ifadesi
x op= y
eşdeğerdir
x = x op y
ancak x bu yalnızca bir kez değerlendirilir.
, & | ve ^ işleçleri, aşağıdaki örnekte de olduğu 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 öncelikten en düşük önceliğe doğru sıralar:
- Mantıksal olumsuzlama işleci
! - Mantıksal AND işleci
& - Mantıksal dış 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 () dayatılan değerlendirme sıralaması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ıra edilen C# işleçlerinin tam listesi için C# işleçleri makalesinde İşleç önceliği bölümüne bakın.
İşleç aşırı yüklemesi
Kullanıcı tanımlı bir tür , , ve ! & | işleçlerini aşırı ^ yükleyene kadar. bir ikili işleç aşırı yük olduğunda, karşılık gelen bileşik atama işleci de örtülü olarak aşırı yüklenmiş olur. Kullanıcı tanımlı tür, bileşik atama işlecinin açıkça aşırı yüklenmesine neden olamaz.
Kullanıcı tanımlı bir tür, ve koşullu mantıksal işleçlerini aşırı yük && || devredamaz. Ancak, kullanıcı tanımlı bir tür true ve false işleçlerini ve veya işlecini belirli bir şekilde aşırı yüklese, sırasıyla veya işlemi bu türün işlenenleri & için değerlendir | && || olabilir. Daha fazla bilgi için C# dil belirtimlerinin 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 belirtimlerinin aşağıdaki bölümlerine bakın: