JAVA中的模运算符 负数取模

取模和取余数的区别和运算

java中取模运算%和取余运算floorMod的区别:
之前一直认为取模和取余数是一样的现在这么想简直离谱
先上结论:**两个数符号相同的话模和余是相同的
符号不同的话余数符号和被除数相同 模符号和除数相同 **
在matlab中,关于取余和取模是这么定义的:

当y≠0时:

取余:rem(x,y)=x-y.*fix(x./y)

取模:mod(x,y)=x-y.*floor(x./y)
其中,fix()函数是向0取整,floor()函数是向负无穷取整

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; 

例如: 4 / (-3) 约等于-1.3

在取余运算时候商值向0方向舍弃小数位于是fix(-1.3) = -1
取余结果 : 4 - (-3)(-1) = 1
在取模运算时商值向负无穷方向舍弃小数位于是 floor(-1.3) = -2
取模结果 : 4 - (-3)(-2) = -2

其实你已经看出一点猫腻了,只是不敢确认而已,没错,就是你心里想的那样的。如果两个数符号相同的话,取模和取余结果是一样的(我们平常用的时候刚好前后两个数字是一样的,所以才有那个误解),如果两个数字符号不相同的话,那么取模和取余结果那就是天差地别了。

求整数商:q = a / b
计算模或者余数:r = a − q × b
​ 取余运算在取 c 的值时,向 0 方向舍入( fix() 函数);而取模运算在计算 c 的值时,向负无穷方向舍入( floor() 函数)。

%:

System.out.println(5%3);
System.out.println((-5)%(3));
System.out.println((5)%(-3));
System.out.println((-5)%(-3));
1
2
3
4
结果:2,-2,2,-2

System.out.println(Math.floorMod(5, 3));
System.out.println(Math.floorMod(-5, 3));
System.out.println(Math.floorMod(5, -3));
System.out.println(Math.floorMod(-5, -3));
1
2
3
4
结果:2,1,-1,-2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值