对于 -1/2 而言,其实是有很多种答案的,比如 -1 = 2*0 - 1, -1 = 2*-1 + 1。
在数学上,余数指整数除法中被除数未被除尽部分,且余数的取值范围为0到除数之间(不包括除数)的整数。商在数学运算中是与除数相乘后,最大的不超过被除数的数。
因此,从数学意义上, -1/2 商应该是-1, 余数应该是+1的。
但是,在C/C++里面,商是向0方向取最接近的整数,余数可以是负数。所以,编程语言里面,-1/2 商应该是 0 , 余数应该是 -1的。
C++的%是数学上的取余,商向0取整。而取模是商向负无穷取整。
取余
rem(-3,-2) 余数是 -1 商是 1
rem(3,-2) 余数是 1 商是 -1
rem(-3,2) 余数是 -1 商是 -1
取模
mod(-3,-2) 模是 -1 商是 1
mod(3,-2) 模是 -1 商是 -2
mod(-3,2) 模是 1 商是 -2
当除数与被除数的符号不相同时,模与余数的结果不同,C++/JAVA/C里面都是取余数,python是取模。 具体说,rem结果的符号与被除数相同;mod结果的符号与除数相同。