这似乎是在处理 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。
我真诚地感谢任何帮助。