我正在使用 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 的结果。
到底他妈发生了什么?