Estaba notando algunos cambios de redacción en la sección 5.6 para C++ 11. (Estoy viendo el borrador del estándar C++ N3242, con fecha del 02/02/2011). El nuevo estándar (borrador) incluye la oración:División de enteros en C++ 11
"Para operandos integrales, el operador/produce el cociente algebraico con cualquier parte fraccional descartada ; "
Esta declaración no está en 5.6 del estándar 03 (ISO-IEC-14882-2003), pero no creo que esto sea un cambio, ¿o sí? Así es como C y C++ han funcionado durante años a menos que haya perdido la cabeza (lo que puede haber sucedido de todos modos).
Esto hará una gran diferencia en mi código. ¿Significa esto que el signo del resultado de '%' también se define ahora? – ThomasMcLeod
@ThomasMcLeod: Sí, todo el asunto '/'/'%' ahora está definido para comportarse igual en todas partes. ¿Estás seguro de que hace una diferencia en tu código? ¿Es su implementación una de las pocas que aún no se trunca? – PlasmaHH
Hay al menos dos formas de interpretar un operador de módulo. La forma más común es simplemente el resto de la división. En este caso, el signo del resultado es el mismo que el signo del cociente. Por ejemplo, '-5% -4 == 1 && -5% 4 == -1'. Otra forma es la forma algebraica, donde el operador de mod devuelve la clase de congruencia del operando.En este caso, 'a% m == b' si y solo si' m' divide '(b - a)' y se define donde 'm' es positivo. Aquí. 'b' es un valor no negativo estrictamente menor que' m', y por lo tanto '-5% 4 == 3'. – ThomasMcLeod