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

除法运算在小学就掌握了的,这里还要讨论什么呢?别急,先计算下面这个例子:
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)的值呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值