模数和无符号整数

时间:2018-07-10 08:38:10

标签: c++ unsigned modulus

我发现以下行为令人惊讶:

int a = -2;
int b = 5;
uint c = 5;
std::cout << a%b << '\n';
std::cout << a%c << '\n';

Output:
-2
4

当涉及comparisons时,将有符号和无符号混合是有问题的-运算符%中是否存在隐藏的比较,还是在这里发生了其他事情?

1 个答案:

答案 0 :(得分:5)

假设uint是一个unsigned,在表达式int的求值中,{{1} }转换为a % c,它将具有值a

对于32位uint,该数字为4294967294,其模5为4。

对于16位-2 + std::numeric_limits<uint>::max() + 1,该数字为65534,其模5再次为4。

参考:https://en.cppreference.com/w/c/language/conversion