本人在调试他人代买的过程中,无意间注意到了这样一个问题:int类型的负数,与unsigned类型的正数,进行求模(取余)%运算,但是结果并不是我想要的,我猜测是是unsigned类型闯祸,但是查找资料没有头绪。
#include <iostream>
using namespace std;
int main() {
int a = -100;
unsigned b = 500;
a %= b;
cout << a << endl;
system("pause");
return 0;
}
运行结果是:196
我一开始以为运行结果会是-100,结果却是196。如果将代码中的a赋值为-10,那么结果就是286。似乎都跟296这个数有关系?为啥会这样?
也就是说会把int类型转成unsigned int来计算。
10的二级制是: 0000 0000 0000 0000 0000 0000 0000 1010
-10的二进制是在10的二进制码基础上取反+1,也就是 1111 1111 1111 1111 1111 1111 1111 0110
-10的十六进制是 FF FF FF F6,转成unsigned int后值是 4294967286, 4294967286除以500取余数就是286
两个类型在内存里存储范围不一样