今天学Java的循环链表,发现一个问题就是%的运算,老师一直在说取模取模,我一直在想什么是取模那不是取余吗,于是有了这篇文章。所以老师说的有问题在Java中%是取余。

此外,余数在数学中的定义是始终大于等于0的,而对于某些编程语言的取余运算不是按照上面的定义来执行的,因此才会出现余数小于0的情况。

先说结论:在C/C++,Java,C#中%是取余,而在python中是取模,为避免出错尽量不使用负数进行运算

取余(rem)和取模(mod)在被除数、除数同号时,结果是等同的,异号时不同。异号时取余结果符号跟被除数(分母)或(前面的数),取模结果符号跟除数(分子)或(后面的数)

取余运算在计算商值C时向0方向舍弃小数位,R是取余结果

C = A / B = 5 / 3 = 1.666666  靠近0取整,则C取 1 ,则R = A - C * B = 2
C = A / B = -7 / 2 = -3.5   ,靠近0取整,则C取-3,则R = A - C * B = -1

取模运算在计算商值C时向负无穷方向舍弃小数位,R是取模结果

C = A / B = 5 / 3 = 1.666666,向无穷小处取整,则C取1,则R = A - C * B = 2
C = A / B = -7 / 2 = -3.5   ,向无穷小处取整,则C取-4,则R = A - C * B = 1