黑马程序员技术交流社区

标题: 毕向东老师的视频第2天09有点问题,貌似感觉讲错了似的。 [打印本页]

作者: FateYin    时间: 2015-5-10 22:38
标题: 毕向东老师的视频第2天09有点问题,貌似感觉讲错了似的。

%左边如果小于右边结果为左边,相等结果为0
  1%-1结果为1  -1%5=-1
  如果出现负数就只看左边。
  如果右边是负数左边是正数并且右边的负数大于-1,不等于本身并且不超过本事的话都等于1
下面的这些是我自己写代码验证的。
  左边正数右边负数:
  大于负本身则等于本身  等于负本身等于零   任何正数负一等于零   负大于本身等于本身

  2323%-2324=2323      2323%-2323=0        2323%-1=0     2323%-2324=2323  
毕向东老师讲的是如果右边是负数只看左边问题就大了。
作者: kolen.j    时间: 2015-5-10 23:21
回去敲敲看。。。
作者: lily15    时间: 2015-5-10 23:38
如果右边是负数的话,负号可以忽略,只看左边。是这个意思吧
作者: FateYin    时间: 2015-5-11 14:22
lily15 发表于 2015-5-10 23:38
如果右边是负数的话,负号可以忽略,只看左边。是这个意思吧

视屏上是这么说的,不过测试后的结果是上面错误的。 你可以看清楚下面我测试的结果。
作者: FateYin    时间: 2015-5-11 14:24
lily15 发表于 2015-5-10 23:38
如果右边是负数的话,负号可以忽略,只看左边。是这个意思吧

额,刚刚我没有看清楚你说的,貌似差不多。 我在测试的时候把我搞蒙了。。。。
作者: fantacyleo    时间: 2015-5-11 15:23
本帖最后由 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




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2