Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Kindle Scribe Colorsoft: riduce le cornici e diventa a colori, ma il prezzo è alto
Kindle Scribe Colorsoft: riduce le cornici e diventa a colori, ma il prezzo è alto
Amazon porta i colori sul suo Kindle da scrittura più grande: schermo Colorsoft a 11 pollici, processore quad-core, penna premium più reattiva e strumenti IA per le note, sono le note salienti. Il salto di prezzo rispetto al modello in bianco e nero si fa sentire, anche se la percezione è quella di trovarsi di fronte a un prodotto di fascia altissima, per veri appassionati
L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint
L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint
Abbiamo intervistato Sumit Dhawan, CEO di Proofpoint, per capire come stia cambiando il mondo della sicurezza con l'avvento dell'intelligenza artificiale e con il ritmo sempre più serrato a cui vengono trovate vulnerabilità nel software. Un problema significativo, che richiederà del tempo per essere risolto (o quantomeno arginato)
L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026
L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026
La parola d'ordine al Nextcloud Summit 2026, che si è tenuto a Monaco, è stata "sovranità". Non come è spesso usato questo termine in politica ma, al contrario, come capacità positiva di decidere il proprio destino tecnologico, con modalità collaborative e aperte. L'Europa dice già molto nel mondo open source, che viene visto come mezzo per ottenere la tanto agognata autonomia digitale
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 17-12-2005, 11: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, 11: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, 11: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, 14: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, 15: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, 22: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, 00: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, 00: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, 04: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, 10: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, 12: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, 12: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, 13: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, 15: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 15:58.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2005, 21: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, 08: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, 13: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, 13: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, 20: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, 07: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


Kindle Scribe Colorsoft: riduce le cornici e diventa a colori, ma il prezzo è alto Kindle Scribe Colorsoft: riduce le cornici e div...
L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint L'IA cambia tutte le regole della sicurezza tra ...
L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026 L'Europa conta nella tecnologia e può ess...
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più Dreame X60 Pro Ultra Complete: i bracci si esten...
TCL 65C8L, la recensione del SQD-Mini LED da 4400 nit misurati TCL 65C8L, la recensione del SQD-Mini LED da 440...
Loongson contro Intel e AMD: dalla Cina ...
Australia, quasi tutti gli under-16 aggi...
Oltre 1.300 miliardi di dollari per la p...
Un nuovo studio mette in dubbio la natur...
Crisi Volkswagen, torna l'ipotesi cessio...
Il CERN spegne il Large Hadron Collider:...
Stranger Than Heaven avrà una storia mol...
Il futuro prezzo di PS6 preoccupa i gioc...
AMD Ryzen 10000 sempre più vicini...
OpenAI strappa ad Apple il capo dell'har...
Caso Anthropic, l'Austria all'UE: "...
Occhiali smart a scuola: cresce il numer...
Picchi di consumi e blackout in Italia: ...
Pannelli fotovoltaici e caldo estremo: q...
Colpisce droni in movimento senza fermar...
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: 14:55.


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