La operación de módulo requiere que ambos operandos sean números enteros o se puedan convertir implícitamente en tipos enteros. Si los dos operandos no son enteros y no se pueden convertir implícitamente a enteros, se producirá un error de compilación, por ejemplo:
cout<< 5.4 % 3 <<endl; // error: invalid operands of types 'double' and 'int' to binary 'operator%'
El signo del resultado de la operación de módulo está determinado por el signo del operando izquierdo. El estándar C99 estipula: si el operando izquierdo de% es positivo, entonces el resultado de la operación de módulo es no negativo; si el operando izquierdo de% es negativo, el resultado de la operación de módulo es negativo o 0.
#include <iostream>
using namespace std;
int main() {
int a = 5;
int b = 2;
int c = -3;
int d = -13;
cout<<"a % b = "<<a%b<<endl;
cout<<"a % c = "<<a%c<<endl;
cout<<"d % c = "<<d%c<<endl;
cout<<"d % a = "<<d%a<<endl;
}
El resultado es el siguiente:
a % b = 1
a % c = 2
d % c = -1
d % a = -3