将unsigned int添加到int

adding unsigned int to int

本文关键字:int 添加 unsigned      更新时间:2023-10-16
#include <iostream>
int main ()
{
    using namespace std;
    unsigned int i = 4;
    int a = -40;
    cout<<a+i<<endl;
    return 0;
}

执行这个命令得到4294967260

我知道这里发生了转换,从有符号整型到无符号整型,但是这个特殊的值是如何产生的,为什么产生的呢?我注意到它接近于| 2147483647 | + 2147483647

当一个unsigned int和一个int相加时,int在相加之前先转化为unsigned int(结果也是unsigned int)。

-1虽然是第一个负数,但实际上相当于最大的无符号数——即(unsigned int) -1 === UINT_MAX

-2的无符号形式是UINT_MAX - 1,以此类推,所以-40 === UINT_MAX - 39 === 4294967256(当使用32位int型时)。

当然,加4就是你的答案:4294967256 + 4 = 4294967260 .

这是一个很棒的测试,您可以在其中学习C(以及类似的c++)中的一些整数规则:http://blog.regehr.org/archives/721

用十六进制表示i和a:

i =   4: 0x 0000 0004
a = -40: 0x FFFF FFD8  

根据c++的隐式转换规则,a + i中的a将被强制转换为unsigned int,即4294967256。所以a + i = 4294967260