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

关于无符号数的取模和取余,第1张

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

至于为什么无符号数在取余时会出现“乱码”,大概是因为将无符号数赋值为负数,在内存中保存为一串“乱码”,对它取余本来就不成立吧。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/563203.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-02
下一篇 2022-04-02

发表评论

登录后才能评论

评论列表(0条)

保存