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

有代码:
unsigned u1 = 42, u2 = 10;
std::cout<
它的结果是什么?
C++中两个unsigned型数值相减_第1张图片

下面研究一下过程。

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

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

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

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

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

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

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

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

你可能感兴趣的:(编译原理,C++,自学笔记)