【发布时间】:2013-08-30 11:37:39
【问题描述】:
my_mod.cpp:
#include <iostream>
using namespace std;
unsigned int my_mod(int a, unsigned int b)
{
int result;
cout << "\ta\t=\t" << a << endl;
cout << "\tb\t=\t" << b << endl;
cout << "\ta%b\t=\t" << a%b << endl;
result = a%b;
if (result < 0) {result += b;}
return result;
}
int main()
{
cout << "-1%5 = " << -1%5 << endl;
cout << "my_mod(-1,5) = " << my_mod(-1,5) << endl;
return 0;
}
通过以下方式编译: g++ ./my_mod.cpp
结果:
-1%5 = -1
a = -1
b = 5
a%b = 0
my_mod(-1,5) = 0
这里到底发生了什么,我就是不明白会发生什么?!这不可能是由于全球范围,对吧?! 我的意思是它是完全相同的 %-expression ......他们怎么能产生 0 和 -1?! (顺便说一下,而不是所需的 4。)
如果有人可以,请向我解释一下……我花了几天时间才将更广泛的错误范围缩小到这个范围。说真的,我快哭了。
如何让我的(全局)自己的模数在上面的示例中返回 4??
【问题讨论】:
-
你为什么会期望 4 作为结果?
-
这应该是实现周期性边界条件,所以得到4就可以了。