其他分享
首页 > 其他分享> > c – 模数和无符号整数

c – 模数和无符号整数

作者:互联网

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

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

Output:
-2
4

当涉及comparisons时,混合有符号和无符号是有问题的 – 在运算符%中是否存在隐藏的比较,或者是否在此处发生了其他事情?

解决方法:

假设uint是无符号类型而不是int,在表达式a%c的求值中,a被转换为uint,它将具有值-2 std :: numeric_limits< uint> :: max()1.

对于32位uint,该数字是4294967294,其中模5是4.

对于16位uint,该数字为65534,模5再次为4.

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

标签:modulus,c,unsigned
来源: https://codeday.me/bug/20190828/1746856.html