gpt4 book ai didi

Java中取余(%)和取模(Math.floorMod)的区别

转载 作者:知者 更新时间:2024-03-13 03:52:10 25 4
gpt4 key购买 nike

之前一直都认为取模和取余是一样的,甚至还怀疑设计语言的大神们不是脑子有问题么,为什么要整两个一样的东西,现在想想还是自己太 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

符号对照表

x y x%y Math.floorMod(x,y)
- + - +
+ - + -
- - - -
+ + + +

通过这张表我们可以得到什么规律呢,取余的时候符号和被除数保持一致,取模的时候符合和除数保持一致。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com