C++中两个unsigned型数值相减

有代码:
unsigned u1 = 42, u2 = 10;
std::cout<<u2 - u1 <<std::endl;
它的结果是什么?

下面研究一下过程。

在我们现实生活中,10-42=-32,但是在C++里面并不是这样。得到-32后时int型,要把它再放入unsigned型,则必须取其模。

取模过程上一篇笔记中已经有记录:原码—反码—补码。

所以,先把32化成二进制,然后在符号位上添上1(int依旧占32位),得到

所以可知-32的二进制为     :10000000000000000000000000100000;

然后符号位不变,取得反码:11111111111111111111111111011111;

最后在末尾加1取得补码     :11111111111111111111111111100000;

然后输出时化为十进制,便得到输出的结果。

PS:32位打0真的不好打,要仔细!


版权声明:本文为XUCHEN1230原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。