震惊,取模和求余原来是不一样得
今天在偶然得一次机会知道取模和求余是不相同得。
对取余和取模定义不同的语言中,两者的不同点只有一个
- 取余运算在计算商值向0方向舍弃小数位
- 取模运算在计算商值向负无穷方向舍弃小数位
先自我总结一下它们得区别:
c=a/b;
在上面这个式子上知道,如果a和b得符号(不是类型是符号正负号)是一样得话,取模和求余是一样得,但是在a和b得符号不是一样得时候,取模是向下取整,而求余是向上取整。这个在哪里又不同那?
这个在涉及到负数得时候就会不同。(在这里提一下:余数只能是自然数,不能为负数),取模得话与b的符号相同,求余的话是与a的符号相同。上面的理由就是他们不同的原因。
-
取模(python里面是取模)
- 5 mod 3 = 2 (5%3=2)
- -5 mod 3 = 1 (向下取整)
5 mod -3 = -1
-
- -5 mod -3 = -2
-
取余(c,c++,java里面都是取余)
- 5 rem 3 = 2
- -5 rem 3 = -2
- 5 rem -3 = 2
- -5 rem -3 = -2
Java中我们如何实现取模呢?在Math中提供了这个函数Math.floorMod,用于我们进行取模,我们有下面的代码进行验证:
public static void main(String[] args) { System.out.println("取模" + Math.floorMod(3, -5)); System.out.println("求余" + 3 % -5); } // 取模-2 // 求余3
参考了https://cloud.tencent.com/developer/article/1520164
https://blog.csdn.net/coder_panyy/article/details/73743722
如下俩位文档。
along