Cos'è l'associatività (per un operatore) e perché è importante?
Aggiornato: associatività degli operatori
Cos'è l'associatività (per un operatore) e perché è importante?
Aggiornato: associatività degli operatori
Risposte:
Per gli operatori, associatività significa che quando lo stesso operatore viene visualizzato in una riga, viene applicata per prima la ricorrenza dell'operatore. Di seguito, lascia che Q
sia l'operatore
a Q b Q c
Se Q
è associativo a sinistra, viene valutato come
(a Q b) Q c
E se è associativo corretto, valuta come
a Q (b Q c)
È importante, poiché cambia il significato di un'espressione. Considera l'operatore di divisione con aritmetica dei numeri interi, che è associativo a sinistra
4 / 2 / 3 <=> (4 / 2) / 3 <=> 2 / 3 = 0
Se fosse associativo corretto, restituirebbe un'espressione indefinita, poiché dividerebbe per zero
4 / 2 / 3 <=> 4 / (2 / 3) <=> 4 / 0 = undefined
expr -> expr + term;
è associativo a sinistra ed expr -> term + expr
è associativo a destra.
a * b / c
valuterebbe se *
sarebbe associativo a sinistra ma /
associativo a destra? Poi c'è una contraddizione. Quindi penso che sia necessario dire "quando operatori con la stessa precedenza e associatività" se si desidera coprire più operatori.
Esistono tre tipi di associatività:
La proprietà associativa in matematica
Ordine delle operazioni nei linguaggi di programmazione
Associatività nelle cache della CPU.
La proprietà Associative in matematica è una proprietà di operatori come l'addizione (+). Questa proprietà consente di riorganizzare le parentesi senza modificare il valore di un'istruzione, ovvero:
(a + b) + c = a + (b + c)
Nei linguaggi di programmazione, l'associatività (o fissità) di un operatore è una proprietà che determina come gli operatori con la stessa precedenza sono raggruppati in assenza di parentesi; cioè in quale ordine viene valutato ogni operatore. Questo può differire tra i linguaggi di programmazione.
Nelle cache della CPU, l'associatività è un metodo per ottimizzare le prestazioni.
Semplice!!
Left Associative means we evaluate our expression from left to right
Right Associative means we evaluate our expression from right to left
Sappiamo che *, / e% hanno la stessa precedenza, ma in base all'associatività, la risposta potrebbe cambiare:
Ad esempio: abbiamo l'espressione: 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
restituisce 2
, no 0
.
è l'ordine di valutazione per operatori con la stessa precedenza. L'ordine DA SINISTRA A DESTRA o DA DESTRA A SINISTRA è importante. Per
3 - 2 - 1
se è da SINISTRA a DESTRA, allora lo è
(3 - 2) - 1
ed è 0. Se va da DESTRA a SINISTRA, allora lo è
3 - (2 - 1)
ed è 2. Nella maggior parte delle lingue, diciamo che l'operatore meno ha un'associatività da SINISTRA A DESTRA.
La situazione 3 - 2 - 1
potrebbe sembrare banale, se l'affermazione è "ovviamente lo facciamo da sinistra a destra". Ma in altri casi, come se fatto in Ruby o in NodeJS:
$ irb
2.6.3 :001 > 2 ** 3 ** 2
=> 512
L' **
operatore è "al potere di". L'associatività va da destra a sinistra. E questo è
2 ** (3 ** 2)
che è 2 ** 9
, cioè 512
, invece di
(2 ** 3) ** 2
che è 8 ** 2
, ad esempio, 64
.
Se ti riferisci all '"associatività degli operatori", è il modo in cui una lingua determina il modo in cui gli operatori con la stessa precedenza vengono raggruppati in assenza di parentesi.
Ad esempio, gli operatori + e - nei linguaggi basati su C hanno la stessa precedenza. Quando scrivi un'espressione che li utilizza entrambi (senza parentesi), il compilatore deve determinare in quale ordine valutarli.
Se scrivi 12 - 5 + 3, le possibili valutazioni includono:
A seconda dell'ordine in cui valuti l'espressione, puoi ottenere risultati diversi. Nei linguaggi basati su C, + e - hanno lasciato l'associatività, il che significa che l'espressione sopra sarebbe valutata come il primo caso.
Tutti i linguaggi hanno regole ben definite sia per la precedenza che per l'associatività. Puoi saperne di più sulle regole per C # qui. I concetti generali di associatività e precedenza degli operatori sono ben trattati su wikipedia.
Presumo tu intenda associatività degli operatori ...
È l'ordine di associazione degli operandi a un operatore. Fondamentalmente:
a - b + c
potrebbe essere valutato come (supponendo - e + abbiano la stessa precedenza):
((a - b) + c) o,
(a - (b + c))
Se gli operatori sono associativi a sinistra (si legano immediatamente all'operando sinistro), verrà valutato come primo. Se sono giuste associative, verrà valutato come il secondo.
Se intendi associatività degli operatori:
Definisce il modo in cui vengono analizzate le espressioni. Fornisce uno standard, quindi ogni espressione viene analizzata allo stesso modo.
È importante soprattutto per le operazioni che hanno la stessa precedenza, quando potrebbero esserci effetti collaterali.
La maggior parte degli esempi precedenti utilizzava costanti. Se gli argomenti sono chiamate di funzioni, l'ordine in cui vengono effettuate le chiamate può essere determinato dalle regole di associazione, a seconda ovviamente del compilatore. E se queste funzioni hanno effetti collaterali ...
Sappiamo tutti che la precedenza è importante, ma lo è anche l'associatività nell'interpretazione del significato di un'espressione. Per un'introduzione davvero semplice, prova Power of Operators .
L'associatività rientra nell'ordine del calcolo nei concetti del linguaggio di programmazione. L'ordine di calcolo determina il significato dell'espressione. Ha due regole principali,
- Regole di precedenza
- Regole di associatività
le regole di precedenza definiscono l'ordine in cui vengono valutati gli operatori "adiacenti" di diverso tipo. Ogni linguaggio di programmazione ha la propria tabella di precedenza degli operatori rispetto ai propri operatori.
Tornando all'associatività,
Definisce l'ordine di esecuzione delle operazioni adiacenti con la stessa precedenza. Ha 3 gusti,
associatività a sinistra associatività a
destra
non associatività
Se un operatore è associativo a sinistra, valuta da sinistra a destra, allo stesso modo se è associativo a destra valuta da destra a sinistra.