关于无符号数的取模和取余
本篇博客记录我在阅读《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; // 结果: -1cout << "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; // 1073741823cout << "d : " << d << endl; // 1
至于为什么无符号数在取余时会出现“乱码”,是因为将无符号数赋值为负数,在内存中保存为一串“乱码”,对它取余本来就不成立吧。
------ 一段时间后的思考--------
int数据类型为32位比特,因此a = 2^32 - 7 = 4,294,967,289,
因此c = 4,294,967,289 / 4 = 1,073,741,823
大功告成!
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
