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