取模根据
y
=
k
∗
x
+
r
y = k * x + r
y=k∗x+r求的是r这个数字
r
=
y
−
y
/
x
∗
x
r = y - y / x * x
r=y−y/x∗x
产生不同的地方是 y / x这个地方,有向下取整floor和小数截取truncate两种方法
C/Java中对负数取模:采用的是truncate除法,直接将小数部分去除
Python中对负数取模:采用的是floor除法,向下取整
下面是我自己计算机上的运行结果,可以手算验证一下
- C/C++
printf("%d ", 15 % 10);
printf("%d ", -15 % 10);
printf("%d ", 15 % -10);
printf("%d ", -15 % -10);
2. Java
System.out.print( 15 % 10 + " ");
System.out.print(-15 % 10 + " ");
System.out.print( 15 % -10 + " ");
System.out.print(-15 % -10 + " ");
3. Python
print( 15 % 10, end = ' ')
print(-15 % 10, end = ' ')
print( 15 % -10, end = ' ')
print(-15 % 10, end = ' ')
参考博客:对负数取模怎么算