Torna indietro   Hardware Upgrade Forum > Software > Programmazione

HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare
HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare
A New York HP ha messo al centro della scena HP IQ, la piattaforma di IA locale da 20 miliardi di parametri. L’abbiamo vista in funzione: è uno strumento che funziona, pensato per un target specifico, con vantaggi reali e limiti altrettanto evidenti
PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è
PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è
La PNY GeForce RTX 5080 Slim OC si distingue nel panorama delle GPU di fascia alta per il design compatto a due slot, ispirato alla NVIDIA GeForce RTX 5080 Founders Edition. In questo test analizziamo comportamento termico e prestazioni in gioco, valutando se il formato ridotto comprometta o meno l'esperienza complessiva rispetto alle soluzioni più ingombranti presenti sul mercato.
Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei
Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei
HUAWEI WiFi Mesh X3 Pro Suite è probabilmente il router mesh più fotogenico che si possa acquistare oggi in Italia, ma dietro il guscio in acrilico trasparente e le luci LED dinamiche c'è una macchina tecnica costruita attorno allo standard Wi-Fi 7, con velocità teoriche Dual-Band fino a 3,6 Gbps e una copertura fino a 120 m² una volta abbinato il router principale all'extender incluso nel kit
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 27-01-2010, 16:26   #1
Gremo
Senior Member
 
L'Avatar di Gremo
 
Iscritto dal: Oct 2000
Città: Udine
Messaggi: 3178
[Linguaggi] Prima l-valore o r-valore?

Ciao a tutti. Sul mio libro c'è un semplice esempio degli effetti collaterali che si possono verificare in merito al calcolo di l-valore e r-valore.
L'esempio è il seguente (a è un vettore):

Codice:
b = 0;
a[f(3)] = a[f(3)] + 1;

int f (int n)
{
   if (b == 0)
   {
      b = 1;
      return 1;
   }
   else
      return 2;
}
Quello che si ottiene è assegnare il valore di a[1] + 1 ad a[2] (secondo il libro). Ma negli assegnamenti lo l-valore non deve essere calcolato prima?

Grazie dell'aiuto
__________________

Desktop: Intel i7-4770K | Asus Gryphon Z87 | Crucial 16GB DDR3 1600MHz | Gigabyte GTX 780 OC Windforce x3 | Samsung 840 Pro 128GB (x 2 RAID0) | be quiet! Straight Power E9 680W CM
Mercatino: bottoni, Dede371, pippokennedy, Bulbi_67, randose, DarkSiDE, davidepaco, _Legend_
Gremo è offline   Rispondi citando il messaggio o parte di esso
Old 30-01-2010, 16:37   #2
Z80Fan
Senior Member
 
L'Avatar di Z80Fan
 
Iscritto dal: Sep 2009
Messaggi: 638
Quote:
Originariamente inviato da Gremo Guarda i messaggi
Ciao a tutti. Sul mio libro c'è un semplice esempio degli effetti collaterali che si possono verificare in merito al calcolo di l-valore e r-valore.
L'esempio è il seguente (a è un vettore):

Codice:
b = 0;
a[f(3)] = a[f(3)] + 1;

int f (int n)
{
   if (b == 0)
   {
      b = 1;
      return 1;
   }
   else
      return 2;
}
Quello che si ottiene è assegnare il valore di a[1] + 1 ad a[2] (secondo il libro). Ma negli assegnamenti lo l-valore non deve essere calcolato prima?

Grazie dell'aiuto
No, il compilatore genera il codice per prima calcolare il r-value, poichè è quello che gli serve per portare avanti l'espressione: se analizzi un codice più semplice:
a=b+3;
prima viene eseguito b+3, poi viene eseguito a=x dove x è il risultato di b+3.
per questo viene eseguito il f(3) del a[f(3)] + 1, perchè i passi che esegue per portare avanti l'espressione sono:
- Trova l'indice del vettore ( chiama f(3) nel r-value)
- preleva l'elemento a quella posizione nel vettore (p. es: 5 )
- esegui 5+1
- trova l'indice del vettore nella l-value
- memorizza il risultato precedente nella posizione del vettore calcolata.

Generalmente tieni presente che un'espressione viene valutata da destra verso sinistra, ma anche questa non è una regola fissa, sopratutto in espressioni più complesse, metti:
a[ f(1) ] = ( a[ f(2) ] +4 ) * a[ f(3) ] ;
Viene prima eseguita la chiamata f(2), poi la f(3) e quindi la f(1).

Spero di essere stato chiaro
__________________
| Il mio "OS" (thread su HWU) | |
Z80Fan è offline   Rispondi citando il messaggio o parte di esso
Old 30-01-2010, 17:17   #3
Gremo
Senior Member
 
L'Avatar di Gremo
 
Iscritto dal: Oct 2000
Città: Udine
Messaggi: 3178
Quote:
Originariamente inviato da Z80Fan Guarda i messaggi
No, il compilatore genera il codice per prima calcolare il r-value, poichè è quello che gli serve per portare avanti l'espressione: se analizzi un codice più semplice:
a=b+3;
prima viene eseguito b+3, poi viene eseguito a=x dove x è il risultato di b+3.
per questo viene eseguito il f(3) del a[f(3)] + 1, perchè i passi che esegue per portare avanti l'espressione sono:
- Trova l'indice del vettore ( chiama f(3) nel r-value)
- preleva l'elemento a quella posizione nel vettore (p. es: 5 )
- esegui 5+1
- trova l'indice del vettore nella l-value
- memorizza il risultato precedente nella posizione del vettore calcolata.

Generalmente tieni presente che un'espressione viene valutata da destra verso sinistra, ma anche questa non è una regola fissa, sopratutto in espressioni più complesse, metti:
a[ f(1) ] = ( a[ f(2) ] +4 ) * a[ f(3) ] ;
Viene prima eseguita la chiamata f(2), poi la f(3) e quindi la f(1).

Spero di essere stato chiaro
Ciao, innanzitutto grazie mille Il discorso è abbastanza chiaro, anche se non campisco perchè il compilatore in x = b + 3 debba prima valutare l'r-valore: il risultato, qualsiasi esso sia, deve essere memorizzato in x, quindi occorre in ogni caso valutare anche la locazione, e questa valutazione può essere fatta anche prima...o sbaglio?
Inolte nel tuo ultimo esempio non mi è chiarissimo perché viene prima f(2), poi f(3) e poi f(1): gli esercizi che devo svolgere sono proprio di questo tipo, vorrei cercare di capirli bene...
Ti ringrazio per l'aiuto
__________________

Desktop: Intel i7-4770K | Asus Gryphon Z87 | Crucial 16GB DDR3 1600MHz | Gigabyte GTX 780 OC Windforce x3 | Samsung 840 Pro 128GB (x 2 RAID0) | be quiet! Straight Power E9 680W CM
Mercatino: bottoni, Dede371, pippokennedy, Bulbi_67, randose, DarkSiDE, davidepaco, _Legend_
Gremo è offline   Rispondi citando il messaggio o parte di esso
Old 30-01-2010, 18:47   #4
Z80Fan
Senior Member
 
L'Avatar di Z80Fan
 
Iscritto dal: Sep 2009
Messaggi: 638
Quote:
Originariamente inviato da Gremo Guarda i messaggi
Ciao, innanzitutto grazie mille Il discorso è abbastanza chiaro, anche se non campisco perchè il compilatore in x = b + 3 debba prima valutare l'r-valore: il risultato, qualsiasi esso sia, deve essere memorizzato in x, quindi occorre in ogni caso valutare anche la locazione, e questa valutazione può essere fatta anche prima...o sbaglio?
Inolte nel tuo ultimo esempio non mi è chiarissimo perché viene prima f(2), poi f(3) e poi f(1): gli esercizi che devo svolgere sono proprio di questo tipo, vorrei cercare di capirli bene...
Ti ringrazio per l'aiuto
Proviamola a mettere in questo modo: come sai gli operatori matematici ( + - * / ) hanno una precedenza ben definita, così pure tutti gli operatori del C(++), ad esempio un po' di operatori messi in ordine decrescente di precedenza (in alto quello con più precedenza, presi dal mio libro di c++):
( ) Parentesi
[ ] Indicizzazione di un array
. selezione di un membro tramite oggetto
++ postincremento
& indirizzo
* moltiplicazione
/ divisione
+ somma
- sottrazione
(altri)
= assegnazione
+= assegnazione con somma

come vedi le assegnazioni (ce ne sono altre) sono gli operatori con la minor precedenza (tralasciando l'operatore virgola), quindi la loro esecuzione viene eseguita per ultima, in questo esempio:
k = c * (a+b) - 4
la priorità maggiore ce la ha (a+b), perchè è racchiusa tra parentesi, poi viene *c, perchè ha la precedenza sul -4, poi viene la sottrazione - 4 ed infine l'assegnazione su k, poichè l'assegnazione ha la precedenza inferiore.
A noi può sembrare un po' strano, perchè siamo tenuti a leggere da sinistra a destra, ma il compilatore lavora solo sulle precedenze e le regole di precedenza gli dicono di gestire l'assegnazione per ultima.
Tornando all'esempio precedente:
a[ f(1) ] = ( a[ f(2) ] +4 ) * a[ f(3) ] ;
Il compilatore valuta (a[ f(2) ] +4) per prima per via delle parentesi, ma per farlo deve valutare a[ .. ] poichè l'indicizzazione ha precedenza superiore alla somma, e per trovare l'indice deve eseguire f(2). Solo dopo che ha risolto questo calcolo ed esaurito la precedenza può analizzare a[ f(3) ], di nuovo, prima gli operatori [ ] (quindi esegue f(3) ), poi la moltiplicazione con il semitotale che aveva calcolato prima, quindi ha il risultato finito e può eseguire l'assegnazione, esegue l'ultimo [ ] e quindi effettua definitivamente l'assegnazione.
Meglio così?
__________________
| Il mio "OS" (thread su HWU) | |
Z80Fan è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare HP Imagine 2026: abbiamo visto HP IQ all’opera, ...
PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è PNY RTX 5080 Slim OC, sembra una Founders Editio...
Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei Wi-Fi 7 con il design di una vetta innevata: ecc...
Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte Core Ultra 7 270K Plus e Core Ultra 7 250K Plus:...
PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu PC Specialist Lafité 14 AI AMD: assemblat...
Stranger Things non è finito! Ecc...
iPhone 18, il mistero sul destino della ...
Motorola lavora al nuovo Razr 70 Ultra: ...
Il programma di ridimensionamento di One...
L'industria statunitense non è co...
La NASA cambia strategia per le missioni...
Mike Fincke, l'astronauta che ha avuto u...
I Meta Ray-Ban Display potrebbero non ar...
La serie di God of War ha trovato l'attr...
Il nuovo iPhone Fold si farà atte...
Ex CEO di Intel furioso verso Wall Stree...
Un foglietto di rame e le prestazioni di...
100 agenti AI per dipendente: quello che...
Le 10 migliori offerte del weekend Amazo...
75'' e 85'' QD-Mini LED: 2 TV interessan...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 21:30.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v