sobrecarga sencillos relacionales prioridad operadores operador jerarquia ejemplos condicional aritmeticos c++ language-lawyer modulo

sencillos - C++ operador% garantías



prioridad de operadores en c (2)

5.6 Operadores multiplicativos.

4) El operador binario produce el cociente y el operador binario% produce el resto de la división de la primera expresión por la segunda. Si el segundo operando de / o% es cero, el comportamiento es indefinido; de lo contrario (a / b) * b + a% b es igual a a. Si ambos operandos son no negativos, el resto es no negativo; si no, el signo del resto está definido por la implementación (énfasis mío)

Esto es de C ++ 03 sin embargo. :(

¿Se garantiza que (-x) % m , donde x y m son positivos en el estándar c ++ (c ++ 0x) es negativo e igual a -(x % m) ?

Sé que está justo en todas las máquinas que conozco.


Además de la respuesta de Luchian , esta es la parte correspondiente del estándar C ++ 11:

El operador binario produce el cociente, y el operador binario% produce el resto de la división de la primera expresión por la segunda. Si el segundo operando de / o% es cero, el comportamiento no está definido. Para los operandos integrales, el operador / produce el cociente algebraico con cualquier parte fraccionaria descartada; si el cociente a / b es representable en el tipo del resultado, (a / b) * b + a% b es igual a a.

Que pierde la última frase. Entonces la parte

(a / b) * b + a% b es igual a a

Es la única referencia en la que confiar, y eso implica que a % b siempre tendrá el signo de a , dado el comportamiento truncador de / . Entonces, si su implementación se adhiere al estándar C ++ 11 a este respecto, el signo y el valor de una operación de módulo se definen perfectamente para los operandos negativos.