Torna indietro   Hardware Upgrade Forum > Software > Programmazione

iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile
iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile
C'è tanta sostanza nel nuovo smartphone della Mela dedicato ai creator digitali. Nuovo telaio in alluminio, sistema di raffreddamento vapor chamber e tre fotocamere da 48 megapixel: non è un semplice smartphone, ma uno studio di produzione digitale on-the-go
Intel Panther Lake: i processori per i notebook del 2026
Intel Panther Lake: i processori per i notebook del 2026
Panther Lake è il nome in codice della prossima generazione di processori Intel Core Ultra, che vedremo al debutto da inizio 2026 nei notebook e nei sistemi desktop più compatti. Nuovi core, nuove GPU e soprattutto una struttura a tile che vede per la prima volta l'utilizzo della tecnologia produttiva Intel 18A: tanta potenza in più, ma senza perdere in efficienza
Intel Xeon 6+: è tempo di Clearwater Forest
Intel Xeon 6+: è tempo di Clearwater Forest
Intel ha annunciato la prossima generazione di processori Xeon dotati di E-Core, quelli per la massima efficienza energetica e densità di elaborazione. Grazie al processo produttivo Intel 18A, i core passano a un massimo di 288 per ogni socket, con aumento della potenza di calcolo e dell'efficienza complessiva.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 22-01-2013, 15:45   #41
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Quote:
Originariamente inviato da The_ouroboros Guarda i messaggi
cmq un altra curiosità del linguaggio C è

Codice:
#include <stdio.h>
#include <stdlib.h>

int main()
{
  int a = 0;
  printf("a =  %d \n", a);
  if(a+1) {}
  printf("a+1 in if %d \n", a);
  if(a++){}
  printf("a++ in if %d \n", a);
  return 0;
}
che non è coerente su tutte le piattaforme.
Provate e ditemi
Questo è sempre corretto.
Quote:
Originariamente inviato da The_ouroboros Guarda i messaggi
era preso da un contesto tipo
Codice:
a=0; b = (a++,a+1,a+2);
e vedere cosa è b.
Su sistemi non x86/x64 non è detto che l'ordine sia sx->dx.
Quello era un piccolo particolare
Questo, invece, dovrebbe dipendere dall'ordine di valutazione delle espressioni, che non è garantito in C.
__________________
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 22-01-2013, 15:47   #42
The_ouroboros
Senior Member
 
L'Avatar di The_ouroboros
 
Iscritto dal: May 2007
Città: Milano
Messaggi: 7103
Quote:
Originariamente inviato da cdimauro Guarda i messaggi
Questo è sempre corretto.

Questo, invece, dovrebbe dipendere dall'ordine di valutazione delle espressioni, che non è garantito in C.
secondo il K&R in ita che ho io dovrebbe essere sx->dx. Però in effetti non dice SEMPRE

P.S: se queste cose sono banali o tediose, ditelo
__________________
Apple Watch Ultra + iPhone 15 Pro Max + Rog Ally + Legion Go
The_ouroboros è offline   Rispondi citando il messaggio o parte di esso
Old 22-01-2013, 15:54   #43
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Il risultato è corretto.

Se vuoi che stampi 1 nel primo caso devi modificare il codice da così:
Codice:
#include <stdio.h>
#include <stdlib.h>

int main()
{
  int a = 0;
  printf("a =  %d \n", a);
  if(a+1) {}
  printf("a+1 in if %d \n", a);
  if(a++){}
  printf("a++ in if %d \n", a);
  return 0;
}
a così:
Codice:
#include <stdio.h>
#include <stdlib.h>

int main()
{
	int a = 0;
	printf("a =  %d \n", a);
	
	if( a = a+1 ) {}
	printf("a+1 in if %d \n", a);
	
	if(a++){}
	printf("a++ in if %d \n", a);
}
E, ovviamente, la seconda printf stamperà 2.


Ultima modifica di Vincenzo1968 : 22-01-2013 alle 16:08.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 22-01-2013, 16:08   #44
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Quote:
Originariamente inviato da The_ouroboros Guarda i messaggi
secondo il K&R in ita che ho io dovrebbe essere sx->dx. Però in effetti non dice SEMPRE
Già. Il compilatore ha la libertà di decidere come valutare le espressioni.

Dovrebbe essere scritto, se non ricordo male, che si vuole essere sicuri di voler preservare l'esatto ordine di valutazione, bisogna ricorrere a delle assegnazioni con variabili di appoggio; ovviamente fuori dalle espressioni (come istruzioni a se stanti).

Comunque il K&R non lo leggo da un pezzo, per cui prendilo con le pinze.
Quote:
P.S: se queste cose sono banali o tediose, ditelo
Ma no, sono interessanti. Altrimenti il thread sarebbe andato deserto.
__________________
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 22-01-2013, 16:20   #45
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515


Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 22-01-2013, 16:27   #46
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Prova a confrontarla con questa:
Codice:
a=0; b = (++a,a+1,a+2);
(Sì, lo so che non dovrebbe cambiare una mazza...)
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 22-01-2013, 16:31   #47
The_ouroboros
Senior Member
 
L'Avatar di The_ouroboros
 
Iscritto dal: May 2007
Città: Milano
Messaggi: 7103
Appena sono a casa provo.. Sono appena uscito dall'ufficio e mi trovo in treno..

Inviato dal mio HUAWEI U8825-1 con Tapatalk 2
__________________
Apple Watch Ultra + iPhone 15 Pro Max + Rog Ally + Legion Go
The_ouroboros è offline   Rispondi citando il messaggio o parte di esso
Old 22-01-2013, 16:40   #48
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Codice:
int main()
{
	int a = 0;
	int b = 0;
	
	printf("a =  %d \n", a);
	
	a=0; b = (++a,a+1,a+2);
	if( a ) {}
	printf("a+1 in if %d \n", a);
	printf("b = %d \n", b);
	
	if(a++){}
	printf("a++ in if %d \n", a);
}
risultato:
Codice:
a =  0 
a+1 in if 1 
b = 3 
a++ in if 2

Ultima modifica di Vincenzo1968 : 22-01-2013 alle 16:47.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 22-01-2013, 16:52   #49
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Se volete che stampi b = 4 dovete fare così:

Codice:
	b = ( ++a, a = a + 1, a = a + 2 );
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 22-01-2013, 17:10   #50
The_ouroboros
Senior Member
 
L'Avatar di The_ouroboros
 
Iscritto dal: May 2007
Città: Milano
Messaggi: 7103
Interessante.. Grazie x aver proseguito la traccia...

Inviato dal mio HUAWEI U8825-1 con Tapatalk 2
__________________
Apple Watch Ultra + iPhone 15 Pro Max + Rog Ally + Legion Go
The_ouroboros è offline   Rispondi citando il messaggio o parte di esso
Old 24-01-2013, 17:30   #51
Gigibian
Senior Member
 
Iscritto dal: Dec 2012
Messaggi: 4434
Quote:
Originariamente inviato da The_ouroboros Guarda i messaggi
dioendente dall'endianness mi sembra
Quote:
Originariamente inviato da cdimauro Guarda i messaggi
Purtroppo sì, perché in quella printf il compilatore esegue il push di tutto il valore, che è un intero (1160290625); non sa che in quel posto la funzione si aspetta un char (in realtà in questo caso sì, perché la stringa è costante; ma soprassediamo considerando il caso più generale).

Poi la routine di parsing, facendo la scansione dello stack, in base al template che gli hai passato, carica il valore che gli serve, in base al tipo specificato nel template. E lì possono succedere anche dei disastri.

In realtà il risultato non è garantito nemmeno su un sistema little-endian, perché un compilatore potrebbe avere i char a 16 bit, e quindi caricare 2 byte anziché uno soltanto...
Supponendo di avere una macchina dove 1 byte=8 bit, il risultato non dovrebbe essere indipendente dall ' endianess ? Non viene cmq stampato l MSB sia che sia a SX che a DX ?
Gigibian è offline   Rispondi citando il messaggio o parte di esso
Old 24-01-2013, 17:57   #52
Gigibian
Senior Member
 
Iscritto dal: Dec 2012
Messaggi: 4434
Quote:
Originariamente inviato da cdimauro Guarda i messaggi
Questo è sempre corretto.

Questo, invece, dovrebbe dipendere dall'ordine di valutazione delle espressioni, che non è garantito in C.
K&R pagina 59: l operatore "comma" valuta da sinistra a destra.
Quindi dovrebbe essere sempre corretto....
Gigibian è offline   Rispondi citando il messaggio o parte di esso
Old 24-01-2013, 18:19   #53
Gigibian
Senior Member
 
Iscritto dal: Dec 2012
Messaggi: 4434
Quote:
Originariamente inviato da cdimauro Guarda i messaggi
Già. Il compilatore ha la libertà di decidere come valutare le espressioni.

Dovrebbe essere scritto, se non ricordo male, che si vuole essere sicuri di voler preservare l'esatto ordine di valutazione, bisogna ricorrere a delle assegnazioni con variabili di appoggio; ovviamente fuori dalle espressioni (come istruzioni a se stanti).

Comunque il K&R non lo leggo da un pezzo, per cui prendilo con le pinze.

Ma no, sono interessanti. Altrimenti il thread sarebbe andato deserto.
Non avevo notato che qualcuno l avesse già evidenziato :P.
No cmq l operatore comma, come tutti gli operatori, ha l ordine di valutazione garantito.
Sono alcune espressioni che non è definito come.vengono valutate.
Ad esempio non sai quali parametri.vengono valutati prima in una definizione di funzione:
Func(a,b,c)
Gigibian è offline   Rispondi citando il messaggio o parte di esso
Old 24-01-2013, 19:44   #54
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 12847
Strano, mi sarei aspettato di vedere solo la prima print.

a++ non dovrebbe essere valutato 0 in quel caso (ovvero il valore della variabile corrente)?

Forse fa prima l'incremento e poi valuta l'if sul registro in questione?

Comunque questo è un motivo per cui cerco sempre di esplicitare il più possibile la condizione, evitando cose di quel tipo che possono creare grossi problemi in chi legge .
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 24-01-2013, 20:17   #55
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Idem.
Quote:
Originariamente inviato da Gigibian Guarda i messaggi
Supponendo di avere una macchina dove 1 byte=8 bit, il risultato non dovrebbe essere indipendente dall ' endianess ? Non viene cmq stampato l MSB sia che sia a SX che a DX ?
No, perché, supponendo che l'intero generato dall'espressione sia a 32 bit, una macchina little-ending esegue il push dei 4 byte sullo stack in ordine inverso rispetto a una big-endian.
Nel momento in cui si referenzia un singolo byte, con una macchina little-endian questo coincide col byte basso dell'intero a 32 bit memorizzato nello stack, mentre per una big-endian corrisponderà a quello alto (da cui il nome, per entrambi).
Quote:
Originariamente inviato da Gigibian Guarda i messaggi
K&R pagina 59: l operatore "comma" valuta da sinistra a destra.
Quindi dovrebbe essere sempre corretto....
Sì, ho visto che per quest'operatore è garantito.
Quote:
Originariamente inviato da Gigibian Guarda i messaggi
Non avevo notato che qualcuno l avesse già evidenziato :P.
No cmq l operatore comma, come tutti gli operatori, ha l ordine di valutazione garantito.
No, sono pochi gli operatori per i quali il compilatore garantisce l'ordine di valutazione corretto. Dallo standard ANSI:
Except as indicated by the syntax /27/ or otherwise specified later
(for the function-call operator () , && , || , ?: , and comma
operators), the order of evaluation of subexpressions and the order in
which side effects take place are both unspecified.
Quote:
Sono alcune espressioni che non è definito come.vengono valutate.
Ad esempio non sai quali parametri.vengono valutati prima in una definizione di funzione:
Func(a,b,c)
Sì, è scritto sopra.
__________________
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 24-01-2013, 20:35   #56
Gigibian
Senior Member
 
Iscritto dal: Dec 2012
Messaggi: 4434
Quote:
Originariamente inviato da cdimauro Guarda i messaggi
Idem.

No, perché, supponendo che l'intero generato dall'espressione sia a 32 bit, una macchina little-ending esegue il push dei 4 byte sullo stack in ordine inverso rispetto a una big-endian.
Nel momento in cui si referenzia un singolo byte, con una macchina little-endian questo coincide col byte basso dell'intero a 32 bit memorizzato nello stack, mentre per una big-endian corrisponderà a quello alto (da cui il nome, per entrambi).

Sì, ho visto che per quest'operatore è garantito.

No, sono pochi gli operatori per i quali il compilatore garantisce l'ordine di valutazione corretto. Dallo standard ANSI:
Except as indicated by the syntax /27/ or otherwise specified later
(for the function-call operator () , && , || , ?: , and comma
operators), the order of evaluation of subexpressions and the order in
which side effects take place are both unspecified.
Sì, è scritto sopra.
Innanzitutto grazie mille della risposta Cesare

tutto chiaro, per quanto riguarda altri gli altri operatori stavo confondendo l' ordine di valutazione con l'associativita che é definita ovviamente x tutti gli operatori
Gigibian è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile iPhone 17 Pro: più di uno smartphone. &Eg...
Intel Panther Lake: i processori per i notebook del 2026 Intel Panther Lake: i processori per i notebook ...
Intel Xeon 6+: è tempo di Clearwater Forest Intel Xeon 6+: è tempo di Clearwater Fore...
4K a 160Hz o Full HD a 320Hz? Titan Army P2712V, a un prezzo molto basso 4K a 160Hz o Full HD a 320Hz? Titan Army P2712V,...
Recensione Google Pixel Watch 4: basta sollevarlo e si ha Gemini sempre al polso Recensione Google Pixel Watch 4: basta sollevarl...
Google annuncia Gemini Enterprise: l'IA ...
Battlefield 6 debutta tra code infinite ...
Gli iPhone di seconda mano dominano il m...
Pavel Durov (Telegram) lancia l'allarme:...
Occhiali Smart come lo smartphone: il fu...
Arriva NVIDIA GB300 NVL72, il cluster di...
Copilot si collega a OneDrive, Gmail e D...
Il Liquid Glass di iOS 26 è stato...
I biocarburanti fanno più danni d...
ELF, il Frankenstein di Mercedes che ant...
Da Kia arriva il passaporto per le batte...
The Elder Scrolls 6 renderà omagg...
YouTube dà una 'seconda chance' a...
Attacco hacker a Oracle E-Business Suite...
Wi-Fi 7 per tutti: FRITZ!Repeater 1700 p...
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: 19:51.


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