有代码:
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真的不好打,要仔细!