在数学里,“模运算”也叫“求余运算”,用mod来表示模运算。
对于 a mod b 可以表示为 a = q(商)*b(模数) + r(余数),其中q表示商,b表示模数且 b != 0,那么余数 r 满足 0 <= |r| < |b|。
如果a和b都是自然数,那么r肯定大于等于0且小于b的整数,如果a和b有一个是负数,那么r就不唯一。例如:
(-3) % 2 : -3 = (-2)*2 + 1,余数是1;-3 = (-1)*2 - 1 ,余数是-1
(-9) % 5 : -9 = (-2)*5 + 1,余数是1;-9 = (-1)*5 - 4 , 余数是-4
从上面两个例子可以得出:
两个余数的绝对值的和等于模数的绝对值。
现在的问题是,两个整数的模运算竟然有两个结果,那么我们到底选择哪一个呢?
在c++中,模运算结果的符号和被除数的符号一致。例如:
-5 % 2 = -1,被除数-5是负数,那么余数就是-1
3 % 2 = 1,被除数3是整数,那么余数就是1