本帖最后由 fantacyleo 于 2015-5-11 15:51 编辑
这种问题,看java language specification是最权威的了:
假设a % b = r,则
(1) r必须满足(a/b)*b+r == a
而a / b=q的规则是:
(1)在满足 |b * q| ≤ |a|的前提下,q的绝对值尽可能大
(2)如果|a|<|b|,则q=0;
(3)如果|a|>=|b|,则a和b同号时,q大于0,a和b异号时,q小于0
用以上规则分析几个例子:
-1 / -2 = 0 根据a/b的规则(2)
-1 / 2 = 0 根据a/b的规则(2)
1/-1=-1 根据a/b的规则(3),1/-1的值应该小于0,根据a/b的规则(1),只有-1满足,因此1/-1=-1
-1/1=-1 根据a/b的规则(3),1/-1的值应该小于0,根据a/b的规则(1),只有-1满足,因此-1/1=-1
-1 / -1 =1 根据a/b的规则(3),1/-1的值应该大于0,根据a/b的规则(1),只有1满足,因此-1/-1=1
1%-1=0 上面得到1/-1=-1,代入(a/b)*b+r == a,得到r=0
-1%2=-1 上面得到-1/2=0,代入(a/b)*b+r == a,得到r=-1 |