将unsigned int添加到int

时间:2013-05-24 05:36:28

标签: c++ types int unsigned-integer

#include <iostream>
int main ()
{
    using namespace std;
    unsigned int i = 4;
    int a = -40;
    cout<<a+i<<endl;
    return 0;
}

执行此操作会给我4294967260

我知道发生了转换,从signed int到unsigned int, 但这个特殊价值如何以及为何如此? 我注意到它接近于|的总和2147483647 | + 2147483647

2 个答案:

答案 0 :(得分:9)

unsigned intint加在一起时,int会在添加之前首先转换为unsigned int(结果也是{{} 1}})。

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

无符号形式的

-2为(unsigned int) -1 === UINT_MAX,依此类推,所以UINT_MAX - 1(使用32位整数时)。

当然,添加4然后给出你的答案: -40 === UINT_MAX - 39 === 4294967256

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

答案 1 :(得分:1)

以十六进制表示i和a:

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

遵循C ++的隐式转换规则, a + i 中的 a 将转换为unsigned int,即4294967256.所以 a + i = 4294967260