ciao
proseguo qui la discussione iniziata con vale in
http://forum.mrwebmaster.it/javascript/30165-js-calcolo-area-aiuto-programmino.html#post112196
perchè si stava andando ot, ma ritengo che comunque sia una discussione interessante ed istruttiva.
parliamo dell priorità degli operatori (mi limito a quelli artimetici, ma il discorso è analogo per quelli di confronto)
da quello che so io in php, js e, salvo che non sia cambiato qualcosa dai tempi in cui li usavo, fortran, basic, C (non C++), pascal la priorità degli operatori aritmetici è sempre stata la seguente (in ordine di priorità da maggiore a minore)
1°: () parentesi
2°: * / % moltiplicazione, divisione, resto intero
3°: + - somma e sottrazione
4°: = assegnazione
(in alcuni linguaggi esisteva anche il ^, elevazione a potenza, che viene dopo le parentesi e prima di moltiplicazione divisione e resto)
per js (e valido anche per gli altri linguaggi citati) priorità degli operatori vedi:
http://books.google.it/books?id=wFJ...epage&q=javascript operators priority&f=false
quindi, indipendentemente dalla sequenza con cui scrivo l'operazione artimetica, esempio:
2+3*5 darà sempre 17
così come
3*5+2 sempre 17
questo perchè l'operatore * (ma potrebbe essere / o %) ha la precedenza sull'operatore + (ma potrebbe essere -)
l'unico modo per modificare l'ordine delle operazioni è introdurre un operatore che preceda es. il *, non è altro che la parentesi, quindi
(2+3)*5 darà sempre 25
come pure
5*(3+2) darà sempre 25
ultimo (non come importanza ma come precedenza) è = assegnazione
infatti
A = 2+3*5 assegnerà alla variabile A il valore 17, cioè vengono eseguiti gli operatori in ordine di precedenza, prima la moltriplicazione 3*5 il risultato sommato a 2 e il risultato finale assegnato ad A
(analoghi gli altri)
quello che confonde un po' vale è che forse si ricorda la notazione polacca inversa (NRP) utilizzata (oggi non so) una volta da alcune calcolatrici HP (non le più semplici) deve la sequenza diventava una pila e, al contrario es. della calcolatrici texas, per fare
2+3*5, se facevo (come a prima vista apparirebbe logico per la notazione normale)
2 [enter]
3 [enter]
+
5 [enter]
*
ottengo 25, per ottenere 17 avrei dovuto fare
3 [enter]
5 [enter]
*
2 [enter]
+
ottenendo 17
(per fortuna l' NRP è utilizzata solo da qualche sofisticato più unico che raro).
quindi concludendo: in qualsiasi operazione aritmetica (con int o float) indipendentemente dalla sua lunghezza o complessità
prima vengono eseguite le operazioni racchiuse tra parentesi e, al loro interno, prima le operazioni di moltiplicazione o divisione poi le somme o sottrazioni
poi fuori delle parentesi prima le moltiplicazioni e/o divisione poi le somme è/o le sottrazioni (non propio così, ma il concetto/risultato è questo)
spero di aver fatto un po' di chiarezza
dimenticavo
ho visto che in un punto hai scritto
5+6/3 = " + ((5+6)/3))
no
5+6/3 != " + ((5+6)/3))
proseguo qui la discussione iniziata con vale in
http://forum.mrwebmaster.it/javascript/30165-js-calcolo-area-aiuto-programmino.html#post112196
perchè si stava andando ot, ma ritengo che comunque sia una discussione interessante ed istruttiva.
parliamo dell priorità degli operatori (mi limito a quelli artimetici, ma il discorso è analogo per quelli di confronto)
da quello che so io in php, js e, salvo che non sia cambiato qualcosa dai tempi in cui li usavo, fortran, basic, C (non C++), pascal la priorità degli operatori aritmetici è sempre stata la seguente (in ordine di priorità da maggiore a minore)
1°: () parentesi
2°: * / % moltiplicazione, divisione, resto intero
3°: + - somma e sottrazione
4°: = assegnazione
(in alcuni linguaggi esisteva anche il ^, elevazione a potenza, che viene dopo le parentesi e prima di moltiplicazione divisione e resto)
per js (e valido anche per gli altri linguaggi citati) priorità degli operatori vedi:
http://books.google.it/books?id=wFJ...epage&q=javascript operators priority&f=false
quindi, indipendentemente dalla sequenza con cui scrivo l'operazione artimetica, esempio:
2+3*5 darà sempre 17
così come
3*5+2 sempre 17
questo perchè l'operatore * (ma potrebbe essere / o %) ha la precedenza sull'operatore + (ma potrebbe essere -)
l'unico modo per modificare l'ordine delle operazioni è introdurre un operatore che preceda es. il *, non è altro che la parentesi, quindi
(2+3)*5 darà sempre 25
come pure
5*(3+2) darà sempre 25
ultimo (non come importanza ma come precedenza) è = assegnazione
infatti
A = 2+3*5 assegnerà alla variabile A il valore 17, cioè vengono eseguiti gli operatori in ordine di precedenza, prima la moltriplicazione 3*5 il risultato sommato a 2 e il risultato finale assegnato ad A
(analoghi gli altri)
quello che confonde un po' vale è che forse si ricorda la notazione polacca inversa (NRP) utilizzata (oggi non so) una volta da alcune calcolatrici HP (non le più semplici) deve la sequenza diventava una pila e, al contrario es. della calcolatrici texas, per fare
2+3*5, se facevo (come a prima vista apparirebbe logico per la notazione normale)
2 [enter]
3 [enter]
+
5 [enter]
*
ottengo 25, per ottenere 17 avrei dovuto fare
3 [enter]
5 [enter]
*
2 [enter]
+
ottenendo 17
(per fortuna l' NRP è utilizzata solo da qualche sofisticato più unico che raro).
quindi concludendo: in qualsiasi operazione aritmetica (con int o float) indipendentemente dalla sua lunghezza o complessità
prima vengono eseguite le operazioni racchiuse tra parentesi e, al loro interno, prima le operazioni di moltiplicazione o divisione poi le somme o sottrazioni
poi fuori delle parentesi prima le moltiplicazioni e/o divisione poi le somme è/o le sottrazioni (non propio così, ma il concetto/risultato è questo)
spero di aver fatto un po' di chiarezza
dimenticavo
ho visto che in un punto hai scritto
5+6/3 = " + ((5+6)/3))
no
5+6/3 != " + ((5+6)/3))
Ultima modifica: