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.
- Birli
!
(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.
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, true
işlenen olarak değerlendirilirse ve işlenen olarak değerlendirilirse false
false
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ç ş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ğerlendirmezfalse
.
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 true
x
değerlendirilir true
ve y
olarak değerlendirilir false
ya da x
olarak değerlendirilir false
ve y
olarak true
değ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 x
true
olurtrue
. 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 x
y
olarak değerlendirilirse true
olurtrue
. Aksi takdirde, sonuç şeklindedir 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 VEYA değerini hesaplar. sonucux || y
, veya y
olarak değerlendirilirse x
true
olurtrue
. Aksi takdirde, sonuç şeklindedir 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.
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ğerlendiriyorsatrue
üretirtrue
.x
veyay
olarak değerlendirilirsefalse
,x & y
üretirfalse
(başka bir işlenen olarak değerlendirsenull
bile). Aksi takdirde sonucux & y
şeklindedirnull
.işleci
|
yalnızca her iki işlenen de olarak değerlendiriyorsafalse
üretirfalse
.x
veyay
olarak değerlendirilirsetrue
,x | y
üretirtrue
(başka bir işlenen olarak değerlendirsenull
bile). Aksi takdirde sonucux | y
şeklindedirnull
.
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 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 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ç op
iç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: