郑州网站建设公司排行榜,沈阳小装修公司哪家好,wordpress跳过短代码,网上推广培训之前一直都认为取模和取余是一样的#xff0c;甚至还怀疑设计语言的大神们不是脑子有问题么#xff0c;为什么要整两个一样的东西#xff0c;现在想想还是自己太 low了#xff0c;竟然不能 get 到大神们的良苦用心。今天莫名其妙的用到了Java的取模方法#xff0c;发现竟然…之前一直都认为取模和取余是一样的甚至还怀疑设计语言的大神们不是脑子有问题么为什么要整两个一样的东西现在想想还是自己太 low了竟然不能 get 到大神们的良苦用心。今天莫名其妙的用到了Java的取模方法发现竟然和我之前的认知完全不一样。于是来这里记录我的天真无知。共勉。。。。。。。
在解读为啥两者会有不同之前先让我们看一组代码结果导向总是好的。看看你是否能看出他们之间的猫腻。
Math.floorMod(4, -3) -2; (4 % -3) 1
Math.floorMod(-4, 3) 2; (-4 % 3) -1
Math.floorMod(-4, -3) -1; (-4 % -3) -1
Math.floorMod(4, 3) 1; (4 % 3) 1; 其实对比上面的结果 其实你已经看出一点猫腻了只是不敢确认而已没错就是你心里想的那样的。如果两个数符号相同的话取模和取余结果是一样的我们平常用的时候刚好前后两个数字是一样的所以才有那个误解如果两个数字符号不相同的话那么取模和取余结果那就是天差地别了。下面让我们来看看为什么会出现这种情况。
在matlab中关于取余和取模是这么定义的
当y≠0时
取余rem(x,y)x-y.*fix(x./y)
取模mod(x,y)x-y.*floor(x./y)
其中fix()函数是向0取整floor()函数是向负无穷取整
例如 4 / (-3) 约等于-1.3
在取余运算时候商值向0方向舍弃小数位于是fix(-1.3) -1 取余结果 : 4 - (-3)(-1) 1在取模运算时商值向负无穷方向舍弃小数位于是 floor(-1.3) -2 取模结果 : 4 - (-3)(-2) -2
符号对照表
xyx%yMath.floorMod(x,y)--------
通过这张表我们可以得到什么规律呢取余的时候符号和被除数保持一致取模的时候符合和除数保持一致。