priorità degli operatori

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.044
150
63
PR
www.borgo-italia.it
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))
 
Ultima modifica:
Ciao,

scusa a me sembra che stiamo dicendi le stesse cose.

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

Giusto.

per l'elevamento alla potenza si usa un metodo dell'oggetto Math non più ^

Math.pow(base,esponente) - Questo metodo visualizza il valore della base alla potenza dell'esponente.

Math.pow(2,3) Risultato 8

1) 2+3*5 darà sempre 17
così come
2) 3*5+2 sempre 17

1) va bene 3*5 = 15 + 2 Risultato 17
2) va bene 3*5 = 15 + 2 Risultato 17

prima esegue le moltiplizazioni o divisioni nell'ordine scritto o

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)

Giusto, utilizzato per non dover riscrivere (se utilizzato o richiesto più di una volta e per aggiungerla a eventuali altri calcoli) per non dover riscrivere 2+3*5 tutte le volte, = è un'operatore di assegnazione.

A = 2+3*5
document.write(A) e mi stampa 17

parseFloat per i numeri con decimali parseInt per gli interi.

2 [enter]
3 [enter]
+
5 [enter]
*
ottengo 25

Come scrivere su una calcolatrice 2+3 = 5 * 5 = 25

3 [enter]
5 [enter]
*
2 [enter]
+
ottenendo 17

Come scrivere su una calcolatrice 5*3 = 15 * 2 = 17

I tipi di numeri utilizzati anche per conversioni

Decimale
Esadecimale
Binario
Ottale

Booleano
Long
Char
Byte
double

ES: decimale 125 = esadecimale 7D conversione in base 16

document.write("Decimale 125: Risultato in Esadeciomale Base 16 = " + (125).toString(16)) // Risultato 7d

Numeri Decimali: numeri compresi da 0 e 9 (set , (0-9)), es: 0, 1, 125, 2500 ecc..
Numeri Esadecimali: numeri compresi tra 0 e 9 (set) Lettere A B C D E F (A=10, B=11, C=12 D=13, E=14, F=15).
Numeri Binari: numeri compresi tra 0 e 1 es: 1111101
Numeri Ottali: numeri compresi tra 0 e 7

il risultato della conversione di un N° decimale del corrispettivo esadecimale, Binario e ottale di 125

Decimale 125
Esadecimale 7D
Binario 1111101
Ottale 175

In risposta a:

dimenticavo
ho visto che in un punto hai scritto
5+6/3 = " + ((5+6)/3))

no
5+6/3 != " + ((5+6)/3))

hai ragione ho fatto copia e incolla delle stringhe ma modificato la formula.


Codice:
<script type="text/javascript">
document.write("1+2*3 = " + (1+2*3)) // = 7
document.write("<br>")
document.write("5+6/3 = " + (5+6/3)) // = 7
document.write("<br>")
document.write("4-7%3 = " + (4-7%3)) // = 3
document.write("<br>")
document.write("6^2 = " + Math.pow(6,2)) // = 36
document.write("<br>")
document.write("2+3*5 = " + ((3+2)*5)) // = 25
document.write("<br>")
document.write("Decimale 125: Risultato in Esadecimale Base (16) = " + (125).toString(16)) // = 7d
</script>

comunque sono tutti errati (gli scritti in stringa, per far vedere quale operazione veniva eseguita e quale è il risultato finale).

Codice:
<script type="text/javascript">
document.write("(1+2)*3 = " + ((1+2)*3)) // = 9
document.write("<br>")
document.write("(5+6)/3 = " + ((5+6)/3)) // = 3.6666666666666665
document.write("<br>")
document.write("4-(7%3) = " + (4-(7%3))) // = 3
</script>

Buona conversazione e esempi, saluti Valeria.
 
Una svista anche per Vale ogni tanto

Come scrivere su una calcolatrice 5*3 = 15 * 2 = 17

Come scrivere su una calcolatrice 5*3 = 15 + 2 = 17

:fonzie:
 
questa discussione dovrebbe andare in "raccolta script per forumisti" nella sezione javascript ...secondo me, voi che ne dite?

Ciao Max,

una discussione da mettere in rilievo e nella sezione apposita, anche se mancano ancora molte info, es: tutti i metodi e le proprietà dell'oggetto Math per eseguire operazioni matematiche, che sono 23, la conversione del tipo di dati ecc..

Valeria.
 
Si però dovresti impostarlo un po meglio

Utilizzare i tag code poi usare i colori evitare la confusione.

Comunque ormai che è qui. Magari si riscrive da capo in modo più ordinato.
A domani.

by max
 
ciao
no secondo me non va in una sez di linguaggio specifica perchè è una discussione a carattere generale, anche se viene citato js la priorità degli operatori è valida per php, asp..... e, penso, molti altri (anche excell segue tale priorità =A1+B1*C1 prima * poi +).
forse, ampliata agli altri operatori e sistemata, andrebbe in sez programmazione
 
In più sezioni

guardando gli script di valeria subito mi è venuto in mente javascript,
visto che abbiamo una bella discussione piena di script molto utili a questa comunity.
Mettendo varie istruzioni di altri linguaggi tutti in una discussione si farebbe confusione.
Bisogna distiguere i vari linguaggi.

..... e, penso, molti altri (anche excell segue tale priorità =A1+B1*C1 prima * poi +).
Excel si scrive con una sola l.

Ciao Signor Gattino

au revoir
by max :fonzie:
 

Discussioni simili