3 c++ int types unsigned-integer
#include <iostream>
int main ()
{
using namespace std;
unsigned int i = 4;
int a = -40;
cout<<a+i<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
执行这个给了我4294967260
我知道有一个转换发生,从signed int到unsigned int,但是这个特殊值的方式和原因是什么?我注意到它接近于|的总和 2147483647 | + 2147483647
当a unsigned int和a int加在一起时,int首先将其转换为unsigned int加法发生之前(结果也是a unsigned int).
-1,作为第一个负数,实际上相当于最大的无符号数 - 即(unsigned int) -1 === UINT_MAX.
无符号形式的-2是UINT_MAX - 1,依此类推-40 === UINT_MAX - 39 === 4294967256(当使用32位整数时).
当然,添加4然后给出你的答案:
4294967256 + 4 = 4294967260.
这是一个很棒的测验,你可以在其中学习C中的一些整数规则(以及类似的C++):http://blog.regehr.org/archives/721