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.
- Tekli
!
(mantıksal olumsuzlama) işleci. - İkili
&
(mantıksal AND),|
(mantıksal OR) ve^
(mantıksal özel 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 sağ işleneni yalnızca gerekli olduğunda değerlendirir.
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, true
işlenen olarak değerlendirilirse false
, ve false
iş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 x
y
olarak değerlendirilirse true
olurtrue
. 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 true
x
değerlendirilir true
ve y
olarak değerlendirilir false
ya 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 x
true
olurtrue
. 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 x
y
olarak değerlendirilirse true
olurtrue
. Aksi takdirde, sonuç olur false
. olarak değerlendirilirse x
false
y
değerlendirilmez.
Aşağıdaki örnekte, işlecin sağ işleneni &&
, sol işlenen olarak değerlendirilirse false
gerç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 x
true
olurtrue
. Aksi takdirde, sonuç olur false
. olarak değerlendirilirse x
true
y
değerlendirilmez.
Aşağıdaki örnekte, işlecin sağ işleneni ||
, sol işlenen olarak değerlendirilirse true
gerç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ğerlendirilirsetrue
üretirtrue
.x
veyay
olarak değerlendirilirsefalse
,x & y
üretirfalse
(başka bir işlenen olarak değerlendirilsenull
bile). Aksi takdirde sonucux & y
olurnull
.|
işleci yalnızca her iki işleneni de olarak değerlendirilirsefalse
üretirfalse
.x
veyay
olarak değerlendirilirsetrue
,x | y
üretirtrue
(başka bir işlenen olarak değerlendirilsenull
bile). Aksi takdirde sonucux | y
olurnull
.
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 null
bile 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ç op
iç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: