online ejemplos descargar definicion caracteristicas c++

ejemplos - c++ online



Operador de módulo con valores negativos (3)

De ISO14882: 2011 (e) 5.6-4:

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

El resto es matemática básica:

(-7/3) => -2 -2 * 3 => -6 so a%b => -1 (7/-3) => -2 -2 * -3 => 6 so a%b => 1

Tenga en cuenta que

Si ambos operandos son no negativos, el resto no es negativo; si no, el signo del resto está definido por la implementación.

de ISO14882: 2003 (e) ya no está presente en ISO14882: 2011 (e)

Por qué hacer tales operaciones:

std::cout << (-7 % 3) << std::endl; std::cout << (7 % -3) << std::endl;

dar diferentes resultados?

-1 1


El signo en tales casos (es decir, cuando uno o ambos operandos son negativos) está definido por la implementación. La especificación dice en §5.6 / 4 (C ++ 03),

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

Eso es todo lo que el lenguaje tiene que decir, en lo que se refiere a C ++ 03.


a % b

en c ++ por defecto:

(-7/3) => -2 -2 * 3 => -6 so a%b => -1 (7/-3) => -2 -2 * -3 => 6 so a%b => 1

en python:

-7 % 3 => 2 7 % -3 => -2

en c ++ a python:

(b + (a%b)) % b