鱼C论坛

 找回密码
 立即注册
查看: 7806|回复: 54

[技术交流] 2/(-2)的值是多少?

[复制链接]
发表于 2016-8-29 11:35:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 樱花 于 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)的值呢?

游客,如果您要查看本帖隐藏内容请回复
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-8-29 11:44:29 | 显示全部楼层
-1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-8-29 12:06:43 | 显示全部楼层
不错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-29 15:16:00 | 显示全部楼层
学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-9-3 09:14:20 | 显示全部楼层
-1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-9-3 09:37:09 | 显示全部楼层
学习一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-10-24 21:49:11 | 显示全部楼层
-1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-10-25 09:57:34 | 显示全部楼层
看看你的解释
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2016-12-7 11:28:28 | 显示全部楼层
和平时四则可以提符号不一样,有点晕  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-2 21:44:00 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-1-3 09:18:06 | 显示全部楼层
2222222222222
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-3 15:46:07 | 显示全部楼层
这些
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-2-23 14:30:56 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-2-23 17:05:52 | 显示全部楼层
-1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-2-23 17:42:24 | 显示全部楼层
学习知识,感谢楼主
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-11 15:17:22 | 显示全部楼层
有点启发
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-13 11:54:34 From FishC Mobile | 显示全部楼层
。?。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-4-26 19:09:51 | 显示全部楼层
谢谢分享
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-30 11:06:27 | 显示全部楼层
很有意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-28 17:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表