C # Operatörlerin Önceliği ve İlişkilendirilmesi: Tanım ve Örnekler

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 * 5yerine 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 + 3ilk ö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ği
Kategori 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 * bilk 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ği
Kategori 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

Ilginç makaleler...