我正在使用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的结果。
到底发生了什么事?
答案 0 :(得分:1)
事实证明,我的程序没有将无符号的160u转换为int 相反,-1被转换为无符号变为4294967295,实际上在由160修改时给出95.
为什么c ++这样做是超出我的,但我发布这个,以便其他人可以从我的经验中学习。
结论:使用%
时不要混用有符号和无符号整数!