[C] Operatore / e operatore %.
Sono all'inizio del linguaggio C e quindi sembrerà una domanda semplice ma non ho capito questo estratto dal testo che sto usando per studiare:
"Descrivere il risultato del caso in cui / o % vengono utilizzati con un operando negativo è complesso. Lo standard C89 afferma che se un operando è negativo il risultato della divisione può essere arrotondato sia per eccesso che per difetto (per esempio il valore di -9/7 può essere sia -1 che -2). Per il C89 se le variabili i e j sono negative allora il segno di i%j dipende dall'implementazione (per esempio -9%7 può valere sia -2 che 5). D'altra parte per lo standard C99 il risultato di una divisione viene sempre arrotondato verso lo zero (quindi -9/7 è sempre uguale a -1) ed il valore di i%j ha sempre lo stesso segno di i (dunque -9/7 è pari a -2)."
Ecco io non capisco come fa -9%7 a poter valere 5. Da dove esce il 5?
-9/7 farà sempre -1, quindi, dalla definizione di divisione:
$-9=-1*7+r$ da cui $r=-2$.
Forse ho un dubbio più sulla definizione di resto, non saprei.
[Il testo è "programmazione in C" di Kim N. King, p.56].
"Descrivere il risultato del caso in cui / o % vengono utilizzati con un operando negativo è complesso. Lo standard C89 afferma che se un operando è negativo il risultato della divisione può essere arrotondato sia per eccesso che per difetto (per esempio il valore di -9/7 può essere sia -1 che -2). Per il C89 se le variabili i e j sono negative allora il segno di i%j dipende dall'implementazione (per esempio -9%7 può valere sia -2 che 5). D'altra parte per lo standard C99 il risultato di una divisione viene sempre arrotondato verso lo zero (quindi -9/7 è sempre uguale a -1) ed il valore di i%j ha sempre lo stesso segno di i (dunque -9/7 è pari a -2)."
Ecco io non capisco come fa -9%7 a poter valere 5. Da dove esce il 5?
-9/7 farà sempre -1, quindi, dalla definizione di divisione:
$-9=-1*7+r$ da cui $r=-2$.
Forse ho un dubbio più sulla definizione di resto, non saprei.
[Il testo è "programmazione in C" di Kim N. King, p.56].
Risposte
Non conoscevo il libro, gli darò uno sguardo perché è interessante che spieghi queste differenze tra gli standard, comunque:
$a mod b = text{Resto}+ a/b$ quindi se $a/b = q$ e $text{Resto} = r$
$a mod b = q + r$
Se $a < 0$:
$a mod b = b - r$
Quindi nel tuo caso:
$a=-9$, $b=7$, $r=2$
$-9 < 0 => -9 mod 7 = 7 - 2 = 5$
$a mod b = text{Resto}+ a/b$ quindi se $a/b = q$ e $text{Resto} = r$
$a mod b = q + r$
Se $a < 0$:
$a mod b = b - r$
Quindi nel tuo caso:
$a=-9$, $b=7$, $r=2$
$-9 < 0 => -9 mod 7 = 7 - 2 = 5$
Ok, grazie. Quindi dipende tutto, di fatto, dal risultato della divisione. Se -9/7=-2 si ha=
$-9=-2*7+r$
da cui appunto $r=5$.
Il libro è un tomo di oltre 700 pagine, pensare che l'esame è già a febbraio...
$-9=-2*7+r$
da cui appunto $r=5$.
Il libro è un tomo di oltre 700 pagine, pensare che l'esame è già a febbraio...
Avrei ancora una domanda, che è un esercizio.
L'espressione
(dato "total" varabile intera)
9-((total-1)%10) è equivalente a
(10-(total%10))%10
? E perché?
Ho provato per esempio a porre total=20 ed in effetti sono equivalenti. Come faccio a dimostrarlo/a passare da una all'altra?
L'espressione
(dato "total" varabile intera)
9-((total-1)%10) è equivalente a
(10-(total%10))%10
? E perché?
Ho provato per esempio a porre total=20 ed in effetti sono equivalenti. Come faccio a dimostrarlo/a passare da una all'altra?