【发布时间】:2013-09-14 04:51:47
【问题描述】:
这似乎是在处理 Remainder/Mod 时被问到的第一件事,我有点碰壁了。我正在教自己用一本教科书和一小段 C 代码来编程。
看到我真的没有教练说,“不,不。它实际上是这样工作的”,我想我会在这里尝试一下。不过,我还没有找到数学部分的结论性答案。
所以...我的印象是这种情况非常罕见,但我仍然想知道在闪亮的编译下发生了什么。另外,这本教科书希望我根据 C89 标准提供使用负余数时可能出现的所有值。是否有人可以检查一下这个数学是否正确?
1) 9%4
9 - (2) * 4 = 1 //this is a value based on x - (x/y) * y
(2) * 4 + (1) = 9 //this is a check based on (x/y) * y + (x%y) = x
2) -9%4
9 - (2) * 4 = 1; 9 - (3) * 4 = -3 //these are the possible values
(2) * 4 + (1) = 9; (3) * 4 + (-3) = 9 //these are the checks
3) 9%-4
Same values as #2??
我尝试在表达式中使用负数进行计算,并得出了 17 和 -33 等荒谬的东西。 #3 也是 1 和 -3 吗??
4) -9%-4
Same as #1??
在代数除法中,负号“取消”。他们在这里做同样的事情,还是发生了其他事情?
我认为最让我困惑的是负面因素。我在学校(5-6 年前)学习代数的方式是“依附”于他们的数字。在编程中,由于它们是一元运算符,不是这样吗?示例:在 #2 上填写 x 的值时,x = 9 而不是 x = -9。
我真诚地感谢任何帮助。
【问题讨论】:
-
@Barmar 这是一个很好的链接,先生。讨论实际上是民间的,而且观点很有趣。
-
目前尚不清楚如何从正负 9 和 4 的任意组合的余数运算中获得 -33 或 17。您应该显示 short, self-contained, compilable example。
-
@Barnar,非常感谢。
-
@Eric Postpischil,这些数字是通过尝试用长手计算余数得到的,在上面的公式中使用 -9 和 -4。没有代码可以配合它们,只是为了查看发生了什么而进行数字运算。