我正在使用 C++ 中的环形 2D 网格(即它在两侧环绕),并编写了一个明显的邻居/相对点函数:
point neighbor(point p0, int dx, int dy)
{
point p=p0;
p.x += dx;
p.y += dy;
p.x %= width; if(p.x<0) p.x += width;
p.y %= height; if(p.y<0) p.y += height;
return p;
}
我完全不知道为什么我的程序不能运行,因为这个函数的实现看起来微不足道。
我以为我了解 % 运算符,我什至记得检查是否有负面结果。尽管如此,我还是开始尝试它; 'width' 是一个无符号的,值为 160,所以我尝试了:
cout << (-1) % 160u;
...看到 95 分的结果我很震惊。
这到底是怎么回事?
最佳答案
事实证明,我的程序没有将无符号的 160u 转换为 int。
相反,-1 被转换为 unsigned 成为 4294967295,实际上当被 160 修改时给出 95。
为什么 c++ 这样做超出了我的范围,但我发布这个是为了让其他人可以从我的经验中学习。
底线:在使用 %
时不要混合使用有符号和无符号整数!
关于c++ - % (mod) 混合签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12877988/