Ho notato alcune modifiche alla sezione 5.6 per C++ 11. (Sto guardando la bozza standard C++ N3242, datata 2011-02-28.) Il nuovo standard (bozza) include la frase:Divisione intera in C++ 11
"Per gli operandi integrali l'operatore/restituisce il quoziente algebrico con qualsiasi parte frazionaria scartata ;"
Questa dichiarazione non è in 5,6 dello standard 03 (ISO-IEC-14882-2003), ma non penso che questo sia un cambiamento, vero? Questo è il modo in cui C e C++ ha funzionato per anni, a meno che non abbia perso la testa (cosa che potrebbe essere comunque accaduta).
Questo renderà un grande diverso nel mio codice. Questo significa che anche il segno del risultato di '%' è definito ora? – ThomasMcLeod
@ThomasMcLeod: Sì, l'intera cosa '/'/'%' è ora definita per comportarsi allo stesso modo ovunque. Sei sicuro che faccia la differenza nel tuo codice? La tua implementazione è una delle poche che non sta già troncando? – PlasmaHH
Esistono almeno due modi per interpretare un operatore modulo. Il modo più comune è semplicemente il resto della divisione. In questo caso, il segno del risultato è uguale al segno del quoziente. Ad es., '-5% -4 == 1 && -5% 4 == -1'. Un altro modo è il modo algebrico, in cui l'operatore mod restituisce la classe congruence dell'operando.In questo caso, 'a% m == b' se e solo se' m' divide '(b - a)' ed è definito dove 'm' è positivo. Qui. 'b' è un non negativo strettamente inferiore a' m', e quindi '-5% 4 == 3'. – ThomasMcLeod