En caso de que alguien le sucede a cuidar:% realmente devuelve el resto, no el módulo. Siempre que los números sean positivos, no hay diferencia.
Sin embargo, para los números negativos puede haber una diferencia. Por ejemplo, -3/2 puede dar dos respuestas posibles: -1 con un resto de -1, o -2 con un resto de 1. Al menos como se usa normalmente en la aritmética modular, el módulo siempre es positivo, por lo que el primero el resultado no corresponde a un módulo.
C89/90 y C++ 98/03 permiten cualquier respuesta, siempre que/y% produzcan respuestas que funcionen juntas para que pueda reproducir la entrada (es decir, -1x2 + -1 -> - 3, -2x2 + 1 = -3).
Para las versiones más nuevas de las normas (C99, C11 y C++ 11) ya no hay ninguna opción: división entera debe ronda hacia 0. Por ejemplo -3/2 debe dar -1 con un resto de - 1. -3/2 dando -2 con un resto de 1 ya no está permitido.
el resto puede ser negativo El estándar C++ solo requiere la igualdad (a/b) * b + (a% b) = a en caso b! = 0 y permite que la división entera redondee hacia cero (C++ 0x incluso lo requiere) – sellibitze
Aunque el resto solo puede ser negativo si el dividendo es negativo (o el divisor, pero eso es 2 aquí). Dependiendo de qué "código" es, eso podría no ser un problema, y con suerte el programador ha pensado en eso al documentar cómo se usará la macro SHUFFLE_STATEMENT_2. –