Bu eğitimde, C # 'da operatör önceliği ve ilişkilendirilebilirliği hakkında bilgi edineceksiniz. Bu bize bir ifadenin C # derleyicisi tarafından nasıl değerlendirildiği konusunda bir fikir verecektir.
C # Operatör Önceliği
Operatör önceliği, bir ifadenin nasıl değerlendirileceğini tanımlayan bir kurallar kümesidir. C # 'da, her C # operatörünün atanmış bir önceliği vardır ve bu önceliklere göre ifade değerlendirilir.
Örneğin , çarpma (*)
operatörünün önceliği, toplama operatörünün önceliğinden daha yüksektir (+)
. Bu nedenle, çarpma içeren işlem toplamadan önce gerçekleştirilir.
Aşağıdaki ifadeye bir göz atın.
int x = 4 + 3 * 5;
Bu ifadeyi çalıştırdıktan sonra x'in değeri ne olacak?
İşlenen 3
, +
ve ile ilişkilidir *
. Daha önce belirtildiği gibi, çarpmanın toplamadan daha yüksek bir önceliği vardır. Yani operasyon 3 * 5
yerine gerçekleştirilir 4 + 3
. X değişkeninin değeri olacaktır 19
.
Eğer toplama daha yüksek bir önceliğe sahipse, 4 + 3
ilk önce değerlendirilecek ve x'in değeri olacaktır 35
.
Operatör Öncelik Tablosu
Operatörün önceliği ne kadar yüksekse, tabloda o kadar yüksek görünür
C # Operatör ÖnceliğiKategori | Operatörler |
---|---|
Sonek Arttırma ve Azaltma | ++, - |
Önek Arttırma, Azaltma ve Tekli | ++, -, +, -,!, ~ |
Çarpımsal | *, /,% |
Katkı | +, - |
Vardiya | <> |
İlişkisel | <,,> = |
Eşitlik | ==,! = |
Bitsel AND | & |
Bitsel ÖZELVEYA | ^ |
Bit tabanlı VEYA | | |
Mantıksal AND | && |
Mantıksal VEYA | || |
Üçlü | ? : |
Görev | =, + =, - =, * =, / =,% =, & =, | =, =, <> = |
Atama operatörleri en düşük önceliğe sahipken, sonek artırma ve azaltma operatörleri en yüksek önceliğe sahiptir.
Örnek 1: Operatör Önceliği
using System; namespace Operator ( class OperatorPrecedence ( public static void Main(string() args) ( int result1; int a = 5, b = 6, c = 4; result1 = --a * b - ++c; Console.WriteLine(result1); bool result2; result2 = b>= c + a; Console.WriteLine(result2); ) ) )
Programı çalıştırdığımızda çıktı şöyle olacaktır:
19 Yanlış
Programda ifadenin nasıl değerlendirildiğini anlayalım.
Öncelik --
ve ++
daha yüksektir *
ve öncelik *
daha yüksektir -
. Dolayısıyla ifade,
sonuç1 = --a * b - ++ c;
eşdeğerdir
sonuç1 = ((--a) * b) - (++ c);
Parantez içindeki ifade, dışındaki operatörlerin önceliği ne olursa olsun her zaman ilk olarak değerlendirilir.
- İlk başta, (--a) sonuçlanarak değerlendirilir
4
. - Daha sonra (++ c) sonuçlanarak değerlendirilir
5
. - Şimdi, (a * b) sonuçlanarak değerlendirilir
24
. - Son olarak, sonuçta çıkarma gerçekleştirilir
19
. - Dolayısıyla sonuç1'in nihai değeri olacaktır
19
.
Bir sonraki ifadede önceliği +
daha yüksektir >=
. Yani, önce c ve a eklenir ve toplam üretmek için b ile karşılaştırılır false
.
C # 'da Operatörlerin İlişkilendirilmesi
Önceki bölümde, operatör önceliği hakkında tartıştık. Farklı önceliğe sahip iki operatör kullanılırsa, önce daha yüksek önceliğe sahip operatör değerlendirilir.
Peki ya her iki operatör de aynı önceliğe sahipse?
Böyle bir durumda ifade, operatörün (soldan sağa veya sağdan sola) ilişkiselliğine göre değerlendirilir.
Örneğin:
int a = 5, b = 6, c = 3; int sonuç = a * b / c;
Burada, hem *
ve /
aynı önceliğe sahiptir. Bu operatörlerin birleşebilirlik gelen çünkü Ama soldan sağa , a * b
ilk değerlendirilir ve daha sonra bölme yapılır. Bu ifadenin nihai sonucu olacaktır 10
.
Bu özel örnekte, çağrışım gerçekten önemli değil. Çünkü bölme çarpmadan önce yapılsa bile sonuç etkilenmeyecektir.
Başka bir örneğe bakalım.
int a = 5, b = 6, c = 3; a = b = c;
Birleşimi, =
operatöründen olduğunu sağdan sola doğru . Yani c (ie 3
) 'nin değeri b'ye atanır ve sonra b'nin değeri a'ya atanır. Yani bu ifadeyi yürüttükten sonra a, b ve c'nin değerleri olacaktır 3
.
Aşağıdaki tablo C # operatörlerinin ilişkilendirilebilirliğini göstermektedir:
C # Operatörlerin ilişkilendirilebilirliğiKategori | Operatörler | İlişkisellik |
---|---|---|
Sonek Arttırma ve Azaltma | ++, - | Soldan sağa |
Önek Arttırma, Azaltma ve Tekli | ++, -, +, -,!, ~ | Sağdan sola |
Çarpımsal | *, /,% | Soldan sağa |
Katkı | +, - | Soldan sağa |
Vardiya | <> | Soldan sağa |
İlişkisel | <,,> = | Soldan sağa |
Eşitlik | ==,! = | Soldan sağa |
Bitsel AND | & | Soldan sağa |
Bitsel ÖZELVEYA | ^ | Soldan sağa |
Bit tabanlı VEYA | | | Soldan sağa |
Mantıksal AND | && | Soldan sağa |
Mantıksal VEYA | || | Soldan sağa |
Üçlü | ? : | Sağdan sola |
Görev | =, + =, - =, * =, / =,% =, & =, | =, =, <> = | Sağdan sola |
Neredeyse tüm operatörler soldan sağa doğru ilişkiselliğe sahiptir. Sağdan sola ilişkiselliğe sahip operatörler şunlardır:
- Tekli operatörler
- Ön Ek Arttırma ve Azaltma Operatörleri
- Üçlü operatör
- Atama Operatörleri
Örnek 2: Operatörlerin İlişkilendirilebilirliği
using System; namespace Operator ( class OperatorPrecedence ( public static void Main(string() args) ( int a = 5, b = 6, c = 3; int result = a * b / c; Console.WriteLine(result); a = b = c; Console.WriteLine("a = (0), b = (1), c = (2)", a, b, c); ) ) )
Programı çalıştırdığımızda çıktı şöyle olacaktır:
10 a = 3, b = 3, c = 3