Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi
Mate X7 rinnova la sfida nel segmento dei pieghevoli premium puntando su un design ancora più sottile e resistente, unito al ritorno dei processori proprietari della serie Kirin. L'assenza dei servizi Google e del 5G pesa ancora sull'esperienza utente, ma il comparto fotografico e la qualità costruttiva cercano di compensare queste mancanze strutturali con soluzioni ingegneristiche di altissimo livello
Nioh 3: souls-like punitivo e Action RPG
Nioh 3: souls-like punitivo e Action RPG
Nioh 3 aggiorna la formula Team NINJA con aree esplorabili più grandi, due stili di combattimento intercambiabili al volo (Samurai e Ninja) e un sistema di progressione pieno di attività, basi nemiche e sfide legate al Crogiolo. La recensione entra nel dettaglio su combattimento, build, progressione e requisiti PC
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti
La facilità di installazione e la completa automazione di tutte le fasi di utilizzo, rendono questo prodotto l'ideale per molti clienti. Ecco com'è andata la nostra prova in anteprima
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 17-12-2005, 12:45   #1
eraser
Senior Member
 
L'Avatar di eraser
 
Iscritto dal: Nov 2001
Città: Bastia Umbra (PG)
Messaggi: 6395
Come legge il compilatore?

Domanda stupida

Il compilatore ha un verso di lettura del codice?

Quello che intendo è questo:

(if a==5 && b==8) , seguendo l'AND logico basta che una delle due sia falsa e l'if non viene controllato.....ma quale delle due espressioni viene controllata per prima? Qualcuno mi ha detto normalmente prima a e, se è vera, b; qualcun altro mi ha detto il contrario

Qual è la realtà?
__________________
:: Il miglior argomento contro la democrazia è una conversazione di cinque minuti con l'elettore medio ::
eraser è offline   Rispondi citando il messaggio o parte di esso
Old 17-12-2005, 12:58   #2
Bane
Member
 
Iscritto dal: Aug 2003
Messaggi: 125
Parlando del C presumo... =)
L'operatore && associa da sx verso dx, la verifica di un'espressione
termina non appena si e' stabilito se l'espressione e' falsa o vera.
Quindi, in questo caso, se (a == 5) e' falsa (b == 8) non viene
nemmeno valutata.
Bane è offline   Rispondi citando il messaggio o parte di esso
Old 17-12-2005, 12:59   #3
eraser
Senior Member
 
L'Avatar di eraser
 
Iscritto dal: Nov 2001
Città: Bastia Umbra (PG)
Messaggi: 6395
si scusa, parliamo di C
__________________
:: Il miglior argomento contro la democrazia è una conversazione di cinque minuti con l'elettore medio ::
eraser è offline   Rispondi citando il messaggio o parte di esso
Old 17-12-2005, 15:52   #4
franksisca
Senior Member
 
L'Avatar di franksisca
 
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
Quote:
Originariamente inviato da Bane
Parlando del C presumo... =)
L'operatore && associa da sx verso dx, la verifica di un'espressione
termina non appena si e' stabilito se l'espressione e' falsa o vera.
Quindi, in questo caso, se (a == 5) e' falsa (b == 8) non viene
nemmeno valutata.
al 90% anche in java segue quella formula.
l'altro 10% è se ero ubriaco o no
__________________
My gaming placement
franksisca è offline   Rispondi citando il messaggio o parte di esso
Old 17-12-2005, 16:45   #5
17Qwerty71
Senior Member
 
Iscritto dal: Jul 2005
Città: San Marino
Messaggi: 309
puoi risponderti alla tua domanda provando ad inserire delle funzioni nella condizione

prova a fare:
Codice PHP:
if((getchar()=='a') && (getchar()=='a')) 
__________________
17Qwerty71 è offline   Rispondi citando il messaggio o parte di esso
Old 17-12-2005, 23:55   #6
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
veramente a me sembra che non sia standard l'ordine di valutazione dei parametri, quindi viene lasciato libero all'implementazione per così dire. in genere naturalmente si valuta da sinistra verso destra.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2005, 01:21   #7
Dun
Senior Member
 
L'Avatar di Dun
 
Iscritto dal: Jul 2000
Città: Amsterdam
Messaggi: 217
Questo ragionamento l'avevo trovato per l'OR invece che per l'AND

Da qualche parte avevo letto che veniva utilizzato il cosiddetto "lazy OR" ovvero se la prima era vera allora non si controllava minimanente la seconda condizione. Questo ovviamente in ambito C.

A dir la verita mi son sempre fidato e non ho mai controllato esplicitamente.
Dun è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2005, 01:43   #8
17Qwerty71
Senior Member
 
Iscritto dal: Jul 2005
Città: San Marino
Messaggi: 309
Quote:
Originariamente inviato da Dun
Questo ragionamento l'avevo trovato per l'OR invece che per l'AND

Da qualche parte avevo letto che veniva utilizzato il cosiddetto "lazy OR" ovvero se la prima era vera allora non si controllava minimanente la seconda condizione. Questo ovviamente in ambito C.

A dir la verita mi son sempre fidato e non ho mai controllato esplicitamente.
Dipende dal compilatore, ma probabilmente se addotta questo sistema con l'OR lo addotta anche per l'AND (nel caso incontrasse una falsa).
Del resto sarebbe poi solo uno spreco di tempo controllare i successivi se si può gia conoscere il risultato della condizione.
__________________
17Qwerty71 è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2005, 05:23   #9
Dun
Senior Member
 
L'Avatar di Dun
 
Iscritto dal: Jul 2000
Città: Amsterdam
Messaggi: 217
Quote:
Originariamente inviato da 17Qwerty71
Dipende dal compilatore, ma probabilmente se addotta questo sistema con l'OR lo addotta anche per l'AND (nel caso incontrasse una falsa).
Del resto sarebbe poi solo uno spreco di tempo controllare i successivi se si può gia conoscere il risultato della condizione.
Esattamente....adesso non mi ricordo esattamente ma mi pare che invece fosse dipendente addirittura dalle specifiche del linguaggio C....
Dun è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2005, 11:50   #10
Bane
Member
 
Iscritto dal: Aug 2003
Messaggi: 125
Quote:
Originariamente inviato da 71104
veramente a me sembra che non sia standard l'ordine di valutazione dei parametri
A me, invece, risulta proprio standard.
L'esempio classico che in questi casi viene fatto e':

if ((p != NULL) && (p->qualcosa != qualcosaltro))

Sai che bello se valutasse i termini con un ordine
non standard o li valutasse sempre tutti... =)

Comportamento analogo per l'operatore ||.

Comunque, sinceramente, non ho voglia di andarmi a
spulciare lo standard per vedere se ricordo correttamente,
facciamo che ognuno si tiene le proprie convinzioni... =))
Bane è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2005, 13:27   #11
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
scusa, ma mi permetto di ribadire
anche io conosco un esempio classico:
Codice:
int i = 5;
printf("%d %d", i++, i--);
lo standard non dice quale sia l'output di quella cosa!
sono però d'accordo sul fatto che molti compilatori valutano da sinistra verso destra (il Microsoft lo fa, l'Intel lo fa, e penso anche il gcc; direi che bastano ).
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2005, 13:54   #12
Bane
Member
 
Iscritto dal: Aug 2003
Messaggi: 125
Mah, forse non mi sono spiegato bene... O_o

Io ho risposto ad una domanda specifica, dicendo che in quel caso
(sequenza di &&/|| bla bla bla) la valutazione avviene in un certo modo
previsto dallo standard (da sx a dx e fermandosi quando bla bla bla).

Ripeto, non in generale, ma nel caso in esame!

Concordo invece che l'esempio da te riportato non e' regolato dallo
standard, ma non c'entra nulla con la domanda specifica del topic =)
Bane è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2005, 14:49   #13
Bane
Member
 
Iscritto dal: Aug 2003
Messaggi: 125
PS: =)

Vabbe', alla fine la curiosita' ha vinto sulla mia bradiposita' per le ricerche... =)

Tratto da: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n869/


6.5.13 Logical AND operator

Syntax

[#1]

logical-AND-expr:
inclusive-OR-expr
logical-AND-expr && inclusive-OR-expr

Constraints

[#2] Each of the operands shall have scalar type.

Semantics

[#3] The && operator shall yield 1 if both of its operands
compare unequal to 0; otherwise, it yields 0. The result
has type int.

[#4] Unlike the bitwise binary & operator, the && operator
guarantees left-to-right evaluation; there is a sequence
point after the evaluation of the first operand. If the
first operand compares equal to 0, the second operand is not
evaluated.
Bane è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2005, 16:54   #14
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da Bane
Concordo invece che l'esempio da te riportato non e' regolato dallo standard, ma non c'entra nulla con la domanda specifica del topic =)
be', dovrebbe entrarci invece, visto che in C++ gli operatori sono funzioni... O.o
ad esempio, metti che tu ridefinisci una versione di operatore + (più): devi scrivere una vera e proprio funzione che si chiama "operator +", vuole in ingresso due parametri del tipo che ti pare a te, e restituisce un tipo che ti pare a te; l'ordine di valutazione dei parametri non è stabilito...

edit: ho letto quello che hai riportato: boh, non so che dire... O_o

Ultima modifica di 71104 : 18-12-2005 alle 16:58.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2005, 22:55   #15
The3DProgrammer
Senior Member
 
Iscritto dal: May 2000
Messaggi: 1459
Quote:
Originariamente inviato da 71104
be', dovrebbe entrarci invece, visto che in C++ gli operatori sono funzioni... O.o
ad esempio, metti che tu ridefinisci una versione di operatore + (più): devi scrivere una vera e proprio funzione che si chiama "operator +", vuole in ingresso due parametri del tipo che ti pare a te, e restituisce un tipo che ti pare a te; l'ordine di valutazione dei parametri non è stabilito...

edit: ho letto quello che hai riportato: boh, non so che dire... O_o

Probabilmente è una precisazione necessaria, prevista proprio per le situazioni che ha descritto Bane. Personalmente conoscevo tale approccio col nome di cortocircuito.

ciau
The3DProgrammer è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2005, 09:20   #16
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
- In C, e' standard la modalita' "Short Circuit", per cui viene valutata la parte di espressione necessaria a determinare il risultato. Essendo comunque presenti sul mercato un'infinita' di compilatori per tutte le piattaforme possibili, non ci farei sempre affidamento e farei un controllo preliminare;

- In Java e' possibile avere entrambe le modalita': l'operatore && ritornera' la valutazione short circuit, l'operatore "bitwise" & (o meglio, e' un operatore bitwise su interi) ritornera' la valutazione "lunga" sui booleani. La stessa cosa puo' essere simulata, con un minimo di attenzione, in C.

Per esempio (Java):

public class Test
{
private static boolean a()
{
System.out.println ("Chiamo A");
return false;
}
private static boolean b()
{
System.out.println ("Chiamo B");
return true;
}

public static void main (String[] args)
{
if (a() && b())
System.out.println ("Risultato AND (Short Circuit) TRUE");
else
System.out.println ("Risultato AND (Short Circuit) FALSE");

if (a() & b())
System.out.println ("Risultato AND TRUE");
else
System.out.println ("Risultato AND FALSE");
}
}

High Flying
Sottovento
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2005, 14:17   #17
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Che io sappia, in C vale sempre la Shor Circuit evaluation degli argomenti "booleani": tutti i compilatori devono attenersi a questa regola, altrimenti escono fuori dallo standard.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 21-12-2005, 14:30   #18
pipozzolo
Senior Member
 
L'Avatar di pipozzolo
 
Iscritto dal: Feb 2001
Città: Kasteddu
Messaggi: 1890
Quote:
Originariamente inviato da cdimauro
Che io sappia, in C vale sempre la Shor Circuit evaluation degli argomenti "booleani": tutti i compilatori devono attenersi a questa regola, altrimenti escono fuori dallo standard.
Esatto! Ma non solo in C
Pensate che bello se fate un controllo in java tipo:

if(oggetto != null && !oggetto.equals("")) {
}

è ovvio che se la prima è falsa la seconda non viene valutata, altrimenti darebbe una poco simpatica NullPointerException.

Poi per il passaggio di parametri alle funzioni, il discorso è diverso, ma per gli operatori logici è assolutamente così.

Per le funzioni sono quasi certo che la valutazione sia obbligatoriamente da sinistra a destra, quindi printf("%d %d", i++, i--); se i vale 5 sarebbe printf("%d %d", 5, 6);
__________________
Asus P5Q-E - Intel Q6600 - Corsair 4GB DDR2 - Radeon HD5770 - Seagate 320GB sata2 16M - Audigy2 ZS
Acer Aspire 3023 WLMI
pipozzolo è offline   Rispondi citando il messaggio o parte di esso
Old 21-12-2005, 21:56   #19
wisher
Senior Member
 
L'Avatar di wisher
 
Iscritto dal: Aug 2005
Messaggi: 2755
Quote:
Originariamente inviato da eraser
Domanda stupida

Il compilatore ha un verso di lettura del codice?

Quello che intendo è questo:

(if a==5 && b==8) , seguendo l'AND logico basta che una delle due sia falsa e l'if non viene controllato.....ma quale delle due espressioni viene controllata per prima? Qualcuno mi ha detto normalmente prima a e, se è vera, b; qualcun altro mi ha detto il contrario

Qual è la realtà?
ho una piccola curiosità: questo problema te lo poni solo a livello concettuale o vorresti giungere a qualche ottimizzazione anche sulle singole operazioni logiche?
__________________
wisher è offline   Rispondi citando il messaggio o parte di esso
Old 22-12-2005, 08:26   #20
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Quote:
Originariamente inviato da pipozzolo
Esatto! Ma non solo in C
Pensate che bello se fate un controllo in java tipo:

if(oggetto != null && !oggetto.equals("")) {
}

è ovvio che se la prima è falsa la seconda non viene valutata, altrimenti darebbe una poco simpatica NullPointerException.
Esattamente. Ed è una gran comodità.
Quote:
Poi per il passaggio di parametri alle funzioni, il discorso è diverso, ma per gli operatori logici è assolutamente così.

Per le funzioni sono quasi certo che la valutazione sia obbligatoriamente da sinistra a destra, quindi printf("%d %d", i++, i--); se i vale 5 sarebbe printf("%d %d", 5, 6);
Non è così: lo standard dice chiaramente che l'ordine di valutazione degli argomenti non è fissato, quindi dipende dal compilatore.

In molti testi trovi anche l'esempietto che se vuoi essere sicuro che un'espressione dev'essere valutata prima di un'altra, devi per forza di cose valutarla per prima:
Codice:
j = i++;
printf("%d %d", j, i--);
per l'esempio che hai portato.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi Recensione HUAWEI Mate X7: un foldable ottimo, m...
Nioh 3: souls-like punitivo e Action RPG Nioh 3: souls-like punitivo e Action RPG
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti Test in super anteprima di Navimow i220 LiDAR: i...
Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto Dark Perk Ergo e Sym provati tra wireless, softw...
DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker DJI RS 5: stabilizzazione e tracking intelligent...
Reddit punterà sull'AI per miglio...
Samsung ha obiettivi molto ambiziosi per...
I produttori non faranno sconti sulle me...
Ubisoft potrebbe cedere pezzi se il pian...
Qualcomm potrebbe utilizzare una tecnolo...
Starfield per Nintendo Switch 2 potrebbe...
Un MacBook Pro a -300€, i MacBook Air M4...
Amazon abbassa i prezzi sugli iPhone: sc...
Amazon, ancora sconti sugli smartphone A...
iPhone Air 2 'riciclerà' alcuni c...
Offerta Amazon da non perdere: lo speake...
Nioh 3 debutta alla grande su Steam: pri...
Al centro della Via Lattea ci potrebbe e...
Elon Musk ora guarda alla Luna: SpaceX p...
La Cina ha lanciato nuovamente lo spazio...
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: 23:31.


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