我发现以下行为令人惊讶:
int a = -2;
int b = 5;
uint c = 5;
std::cout << a%b << '\n';
std::cout << a%c << '\n';
Output:
-2
4
当涉及比较时,混合使用有符号和无符号是有问题的——操作符%
中是否存在隐含的比较,或者其他情况正在发生?
(a/b)*b + a%b等于a
。至少在不同的CPU上,a / b会以不同的方式四舍五入,标准允许这样做。%然后更改以保留所提到的相等性。 - Goswin von Brederlow