关于无符号数的取模和取余

本篇博客记录我在阅读《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

大功告成!


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部