本篇博客记录我在阅读《C++ Primer》P33面遇到的一个小问题:
unsigned char c = -1; 最后c取得的结果为255。
给的解释是:-1 % 256 = 255
我的疑问是:为什么-1 mod 256 会是 255 呢?
然后我VS Studio上运行了一段测试代码
int a = -7;
int b = 4;
int c = a / b;
int d = a % b;
cout << "c : " << c << endl; // 结果: -1
cout << "d : " << d << endl; // 结果: -3
这一点比较符合我的想法。
然后对于无符号数又有不同,无符号数取余数为(-7 + n * 4)% 4 ,n为保证让(-7 + n*4)为正数的最小值,在本处就是n=2满足(4 * 2 - 7)= 1, 就是1 % 4 = 1。
unsigned int a = -7;
unsigned int b = 4;
int c = a / b;
int d = a % b;
cout << "c : " << c << endl; // 1073741823
cout << "d : " << d << endl; // 1
至于为什么无符号数在取余时会出现“乱码”,大概是因为将无符号数赋值为负数,在内存中保存为一串“乱码”,对它取余本来就不成立吧。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)