|
Appunti informatica |
|
Visite: 1330 | Gradito: | [ Picolo appunti ] |
Leggi anche appunti:Interazione tra c e assemblerInterazione tra C e Assembler Il C, pur rientrando tra i linguaggi di alto Problemi di cooperazione nel modello a scambio di messaggiProblemi di cooperazione nel modello a scambio di messaggi VIII) Scrivere Complemento a unoComplemento a uno L'operatore di complemento a uno è rappresentato con la tilde |
Il segno meno (' ') può essere utilizzato come negazione algebrica, cioè per esprimere numeri negativi o, più esattamente, per invertire il segno di un valore: in tal caso esso ha precedenza maggiore di tutti gli operatori aritmetici (vedere pag. ), per cui
a = -b * c;
è valutata moltiplicando c per il valore di b cambiato di segno. Si osservi che le negazione algebrica di un valore non modifica il valore stesso, ma lo restituisce con segno opposto e identico modulo: nell'esempio appena riportato, il valore in b non viene modificato.
Gli operatori di (auto)incremento e (auto)decremento sommano e, rispettivamente, sottraggono alla variabile a cui sono applicati. L'espressione
++a;
incrementa di il valore di a, mentre
--a;
lo decrementa. E' molto importante ricordare che essi possono essere prefissi o suffissi; possono, cioè, sia precedere che seguire la variabile a cui sono applicati. Il loro significato rimane il medesimo (sommare o sottrarre ), ma il loro livello di precedenza cambia. Nell'espressione
a = ++b;
ad a viene assegnato il valore di b incrementato di , perché, in realtà, dapprima è incrementata la variabile b e successivamente il suo nuovo valore è assegnato ad a. Invece, con
a = b++;
ad a è assegnato il valore di b e solo successivamente questa è incrementata. Analoghe considerazioni valgono nel caso dell'operatore di decremento. Ancora: nella
if(a > ++b) .
la condizione è valutata dopo avere incrementato b, mentre nella
if(a > b++) .
dapprima è valutata la condizione e poi viene incrementata b
La differenza tra operatore prefisso e suffisso, però, scompare quando l'autoincremento della variabile sia parametro di una chiamata a funzione: con riferimento ad una riga come
printf('%dn',++a);
spesso non è possibile sapere a priori se a viene incrementata prima di passarne il valore a printf(), o se, al contrario, l'incremento è effettuato in seguito. Ci si potrebbe aspettare che la scrittura ++a determini l'incremento prima della chiamata, mentre a++ lo determini dopo; tuttavia il C non stabilisce una regola univoca. Ciò significa che ogni compilatore può regolarsi come meglio crede. E questo a sua volta significa che possono esserci compilatori che fissano a priori un modo univoco di procedere, ed altri che invece decidono caso per caso in fase di compilazione, sulla base, ad esempio, di opzioni di ottimizzazione del codice in funzione della velocità, della dimensione, e così via. E' dunque indispensabile consultare molto attentamente la documentazione del compilatore o, meglio ancora, evitare possibili ambiguità dedicando all'incremento della variabile un'istruzione separata dalla chiamata a funzione, anche in vista di un possibile porting del programma ad altri compilatori (al riguardo vedere anche pag.
Gli operatori ' ' e ' ' modificano sempre il valore della variabile a cui sono applicati.
Appunti su: |
|