İlişkilendirme nedir (bir operatör için) ve neden önemlidir?
Güncellenmiş: operatör ilişkilendirmesi
İlişkilendirme nedir (bir operatör için) ve neden önemlidir?
Güncellenmiş: operatör ilişkilendirmesi
Yanıtlar:
Operatörler için ilişkilendirilebilirlik, aynı operatör bir satırda göründüğünde, daha sonra hangi operatör oluşumunu ilk uyguladığımız anlamına gelir. Aşağıda Q
operatör olalım
a Q b Q c
Eğer Q
sol taraf ise, o zaman olarak değerlendirir
(a Q b) Q c
Ve eğer doğru çağrışımsal ise, o zaman şu şekilde değerlendirir:
a Q (b Q c)
Bir ifadenin anlamını değiştirdiği için önemlidir. İlişkili bırakılan tamsayı aritmetiği ile bölme operatörünü düşünün
4 / 2 / 3 <=> (4 / 2) / 3 <=> 2 / 3 = 0
Doğru ilişkilendirilebilir olsaydı, tanımlanmamış bir ifade olarak değerlendirilirdi, çünkü sıfıra bölerdiniz
4 / 2 / 3 <=> 4 / (2 / 3) <=> 4 / 0 = undefined
expr -> expr + term;
, sol ilişkiseldir ve expr -> term + expr
sağ ilişkiseldir.
a * b / c
olacaksa nasıl değerlendirilir ? Sonra bir çelişki var. Bu yüzden, birden fazla operatörü kapsamak istiyorsanız, "aynı önceliğe ve ilişkiye sahip operatörler olduğunda" demek gerektiğini düşünüyorum. *
/
Üç tür çağrışım vardır:
Programlama dillerinde İşlem Sırası
CPU önbelleklerinde ilişkilendirilebilirlik.
Matematikteki İlişkili özellik, toplama (+) gibi operatörlerin bir özelliğidir. Bu özellik, bir ifadenin değerini değiştirmeden parantezleri yeniden düzenlemenizi sağlar, yani:
(a + b) + c = a + (b + c)
Programlama dillerinde, bir operatörün ilişkilendirilebilirliği (veya sabitliği), aynı önceliğe sahip operatörlerin yokluğunda nasıl gruplandırılacağını belirleyen bir özelliktir. parantez ; yani, her operatörün hangi sırayla değerlendirildiği. Bu, programlama dilleri arasında farklılık gösterebilir.
CPU önbelleklerinde ilişkilendirilebilirlik, performansı optimize etmenin bir yöntemidir.
Basit!!
Left Associative means we evaluate our expression from left to right
Right Associative means we evaluate our expression from right to left
* Ve% 'nin aynı önceliğe sahip olduğunu biliyoruz, ancak ilişkilendirilebilirliğe göre yanıt değişebilir:
Örneğin: İfademiz var: 4 * 8/2% 5
Left associative: (4 * 8) / 2 % 5 ==> (32 / 2) % 5 ==> 16 % 5 ==> 1
Right associative: 4 * 8 /(2 % 5) ==> 4 * ( 8 / 2) ==> 4 * 4 ==> 16
2 % 5
değerlendiriyor 2
, değil 0
.
aynı önceliğe sahip operatörler için değerlendirme sırasıdır. Soldan sağa veya sağa sola sıralaması önemlidir. İçin
3 - 2 - 1
SOLDAN SAĞA ise, o zaman
(3 - 2) - 1
ve 0'dır. SOLA DOĞRU ise, o zaman
3 - (2 - 1)
ve 2'dir. Çoğu dilde, eksi operatörünün SOLA SAĞA bir çağrışım özelliği olduğunu söylüyoruz.
3 - 2 - 1
İddia "tabii ki soldan sağa yapıyoruz" ise, durum önemsiz görünebilir. Ancak Ruby'de veya NodeJS'de yapıldığı gibi diğer durumlarda:
$ irb
2.6.3 :001 > 2 ** 3 ** 2
=> 512
**
Operatör "gücüne" dir. İlişkilendirme sağdan sola doğrudur. Ve budur
2 ** (3 ** 2)
ki bu 2 ** 9
, örneğin, 512
yerine
(2 ** 3) ** 2
ki bu 8 ** 2
, yani, 64
.
"Operatör ilişkilendirilebilirliği" nden bahsediyorsanız - bu, bir dilin aynı önceliğe sahip operatörlerin parantez olmadan nasıl gruplandırılacağını nasıl belirlediğidir.
Örneğin, C tabanlı dillerdeki + ve - operatörleri aynı önceliğe sahiptir. Her ikisini de kullanan (parantezsiz) bir ifade yazdığınızda, derleyicinin bunları hangi sırada değerlendireceğini belirlemesi gerekir.
12 - 5 + 3 yazarsanız, olası değerlendirmeler şunları içerir:
İfadeyi değerlendirdiğiniz sıraya bağlı olarak farklı sonuçlar alabilirsiniz. C tabanlı dillerde, + ve - sol ilişkiselliğe sahiptir, bu da yukarıdaki ifadenin ilk durum olarak değerlendirileceği anlamına gelir.
Tüm dillerin hem öncelik hem de çağrışım için güçlü bir şekilde tanımlanmış kuralları vardır. Burada C # kuralları hakkında daha fazla bilgi edinebilirsiniz. Operatör çağrışımı ve önceliğinin genel kavramları wikipedia'da iyi bir şekilde ele alınmıştır.
Operatör çağrışımını kastettiğinizi varsayıyorum ...
İşlenenlerin bir operatöre bağlanma sırasıdır. Temel olarak:
a - b + c
şu şekilde değerlendirilebilir (- ve + aynı önceliğe sahiptir):
((a - b) + c) veya,
(a - (b + c))
Operatörler ilişkisel olarak bırakılırsa (hemen sol işlenene bağlanır), ilk olarak değerlendirilir. Doğru çağrışımlılarsa, ikinci olarak değerlendirilecektir.
Hepimiz önceliğin önemli olduğunu biliyoruz, ancak bir ifadenin anlamını yorumlamada çağrışım da önemlidir. Gerçekten basit bir giriş için Power of Operators'ı deneyin .
İlişkilendirme, programlama dili kavramlarında hesaplama sırasına girer. Hesaplama sırası, ifadenin anlamını belirler. İki ana kuralı vardır,
- Öncelik kuralları
- İlişkilendirme kuralları
öncelik kuralları, farklı türlerdeki "bitişik" operatörlerin değerlendirilme sırasını tanımlar. Her programlama dilinin, operatörlerine ilişkin kendi operatör öncelik tablosu vardır.
İlişkiselliğe geri dönersek,
Aynı önceliğe sahip bitişik işlemlerin yürütme sırasını tanımlar. 3 çeşidi vardır,
sol çağrışım
sağ çağrışım
ilişkisizlik
Bir operatör sola ilişkiliyse, aynı şekilde soldan sağa doğru değerlendirir, eğer sağla ilişkiliyse, sağdan sola doğru değerlendirir.