樱花 发表于 2016-8-29 11:35:26

2/(-2)的值是多少?

本帖最后由 樱花 于 2016-8-29 11:36 编辑

除法运算在小学就掌握了的,这里还要讨论什么呢?别急,先计算下面这个例子:

2/(-2)的值为多少?2%(-2)的值呢?如果与你想象的结果不一致,不要惊讶。我们先看看下面这些规则:
假定我们让a 除以b,商为q,余数为r:
   q = a/b;
   r = a%b;
这里不妨先假定b 大于0。

我们希望a、b、q、r 之间维持什么样的关系呢?
1,最重要的一点,我们希望q*b + r == a,因为这是定义余数的关系。
2,如果我们改变a 的正负号,我们希望q 的符号也随之改变,但q 的绝对值不会变。
3,当b>0 时,我们希望保证r>=0 且r<b。

这三条性质是我们认为整数除法和余数操作所应该具备的。但是,很不幸,它们不可能同时成立。

先考虑一个简单的例子:3/2,商为1,余数也为1。此时,第一条性质得到了满足。好,把例子稍微改写一下:(-3)/2 的值应该是多少呢?如果要满足第二条性质,答案应该是-1。但是,如果是这样,余数就必定是-1,这样第三条性质就无法满足了。如果我们首先满足第三条性质,即余数是1,这种情况下根据第一条性质,商应该为-2,那么第二条性质又无法满足了。

上面的矛盾似乎无法解决。因此,C 语言或者其他语言在实现整数除法截断运算时,必须放弃上述三条性质中的至少一条。大多数编程语言选择了放弃第三条,而改为要求余数与被除数的正负号相同。这样性质1 和性质2 就可以得到满足。大多数C 语言编译器也都是如此。

但是,C 语言的定义只保证了性质1,以及当a>=0 且b>0 时,保证|r|<|b|以及r>=0。后面部分的保证与性质2 或性质3 比较起来,限制性要弱得多。通过上面的解释,你是否能准确算出2/(-2)和2%(-2)的值呢?

**** Hidden Message *****

123123aaasss 发表于 2016-8-29 11:44:29

-1

迷雾少年 发表于 2016-8-29 12:06:43

不错

沉睡员 发表于 2016-8-29 15:16:00

学习了

DarkSE 发表于 2016-9-3 09:14:20

-1

紫瞰 发表于 2016-9-3 09:37:09

学习一下

bhsx 发表于 2016-10-24 21:49:11

-1

求道于盲 发表于 2016-10-25 09:57:34

看看你的解释

求道于盲 发表于 2016-10-25 10:06:37

你的解释有很多都是毫无出处的脑洞??
从未听说过 除法运算和求余运算有这样的性质

除法很简单
2/(-2) 结果就 -1
没什么疑问

2%(-2)
(a/b)*b + a%b == a
满足这条表达式就可以了
2/-2*-2+2%-2 == 2
2+2%-2 == 2
所以 2%-2 结果是 0

hyj57555 发表于 2016-12-7 11:28:28

和平时四则可以提符号不一样,有点晕{:9_224:}

不二风 发表于 2017-1-2 21:44:00

{:5_99:}

wankun123 发表于 2017-1-3 09:18:06

2222222222222

15701168680 发表于 2017-1-3 15:46:07

这些

那天麦子 发表于 2017-2-23 14:30:56

看看

caokaifa 发表于 2017-2-23 17:05:52

-1

夜墨 发表于 2017-2-23 17:42:24

学习知识,感谢楼主

梵高 发表于 2017-4-11 15:17:22

有点启发

‘’青空 发表于 2017-4-13 11:54:34

。?。

Caleb 发表于 2017-4-26 19:09:51

谢谢分享

sky_m 发表于 2017-4-30 11:06:27

很有意思
页: [1] 2 3
查看完整版本: 2/(-2)的值是多少?